【发布时间】:2020-04-08 10:30:34
【问题描述】:
我有一些协程:
IEnumerator a(){ /* code */ }
IEnumerator b(){ /* code */ }
IEnumerator c(){ /* code */ }
我想创建一个并行调用a、b 和c 的协程,但要等待所有这些都完成后再继续,例如:
IEnumerator d(){
StartCoroutine(a());
StartCoroutine(b());
StartCoroutine(c());
wait until all of them are over
print("all over");
}
显然我可以为每个协程使用布尔值来保存其当前状态,但由于这种方法不可扩展,我更喜欢更直接的解决方案。
【问题讨论】:
-
这能回答你的问题吗? Wait for coroutine to finish
-
没有。我知道
yield StartCoroutine(a())等待协程完成,但我想同时启动它们,并行执行。每个都有自己的持续时间,当最后一个结束时,d应该打印“all over”。 -
协程本质上是单线程的。从本质上讲,它们不能“并行”运行。你需要线程
-
@AndrewŁukasik 你说得对。但认为它们“并行执行”是错误的。无论如何,等待协程完成的唯一方法是让调用方法成为协程(或编写自己的标志系统)。
-
在 Daniel 使用的抽象级别上,它们并行运行。这就像通过告诉他们相对论来回答某人关于使用牛顿第二定律的问题。
标签: c# unity3d coroutine ienumerator