我正在寻找一种通用/可重用的方法来等待协程和异步操作在Unity 5中完成,类似于C#5的await
关键字。
我能想到的最简单的方法是这样的:
public class SomeUtility {
public bool IsDoingSomething { get; private set; }
public IEnumerator DoSomethingAsync() {
IsDoingSomething = true;
yield return new WaitForSeconds(2);
IsDoingSomething = false;
}
}
然后在另一个协程中:
while(!someUtilityInstance.IsDoingSomething)
yield return null;
但是,这不是很好,因为它会使while
语句变得混乱,不可重用(即使是简单的实用程序功能,也需要实例和专用的类!)以及很多甚至不需要的单例或静态内容。
我发现最接近的是使用Unity的AsyncOperation
。这在这里很好地工作:
public static IEnumerator Await(this AsyncOperation operation) {
while(!operation.isDone)
yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();
但是..问题是:如何创建一个AsyncOperation
?例如,一些服务SceneManager
正在使用它,但是文档完全缺少创建自定义操作或包装现有协程等内容。
那么,有没有办法为自定义协程创建一个简单,通用且可恢复的“等待”呢?
也许使用反射和回调?将两种方法传递到协程中。第一个方法要做。使用反射来查看何时完成,然后致电第二个
—
Evorlor '16