假设在Unity中,我使用一个Web API来获得JSON响应。
public IEnumerator GetCompletion(string prompt, System.Action<string> callback, float temperature = 0.8f)
{
UnityWebRequest www = UnityWebRequest.Post("https://api.openai.com/v1/completions", "");
// ... snip ....
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.ConnectionError)
{
Debug.Log(www.error);
www.Dispose();
yield return null;
}
else
{
www.Dispose();
callback?.Invoke(GetResultFromJson(www.downloadHandler.text));
}
}
我可以通过
const string prompt = "Albert Einstein was";
StartCoroutine(
textAI.GetCompletion(prompt, (string result) =>
{
Debug.Log(result);
},
temperature: 0.5f
));
我如何重构这个协程方法以使用C#的Await和Async方法?
我没有任何特别的最终目标,除了可能使事情更容易阅读,因为在调用时嵌套较少(当协程需要另一个coutroutine时,或者当我需要同时等待多个coutroutine时也是如此)。谢谢!
2条答案
按热度按时间wn9m85ua1#
如果你有时间的话,Unity正计划使用现代的C#技术。Await/async正在规划中。
应该是这样的:
来源:Unity and .NET Whats next
pkln4tw62#
我不知道是否有更简单的答案,但是可以从Asset Store导入免费的UniRx。
现在可以使用以下功能代码:
它可以这样命名