【发布时间】:2022-01-19 13:38:00
【问题描述】:
我在 Unity 2020.3 中使用 UniTask。 我想调用一个异步方法,它在 Unity 事件函数中返回一个 UniTask。
由于某种原因,我无法将事件函数更改为异步版本,有没有其他方法可以调用它?
比如,把异步方法包装成回调函数?
例如,我有一个这样的异步函数:
public void async UniTask<string> GetStringAsync();
我想这样称呼它:
public class MyMonoBehaviour: MonoBehaviour
{
pirvate string myString;
pirvate void Start()
{
myString = await GetStringAsync();
}
}
我不能在 Start() 中使用 await,因为它不是异步函数。
所以,我想把GetStringAsync()包装成一个回调函数并在Start()中调用它,但是我不知道该怎么做。
我知道最简单的解决方案是将Start()更改为async Start(),
但是如果我想在任何普通函数中调用GetStringAsync() 怎么办?再次将其更改为异步?
我不喜欢 async 在我的代码中像病毒一样传播。因为函数可能是一些遗留代码,所以想尽量少修改。
【问题讨论】:
-
您能否展示您的代码并进一步解释您到底想要做什么以及您尝试了什么?
-
@derHugo 感谢您的回复,我已更新问题并添加更多详细信息。
-
I cannot use await in Start() because it is not an async function.. 你试过把它变成async吗? ^^ -
@derHugo 是的,让它异步是最简单的解决方案,我只是想知道是否可以将异步函数包装到回调中。
-
我不完全理解你的意思,但是 Unity 允许将
Start设为异步方法
标签: c# unity3d async-await