较新的版本以产生阵列具有async
/await
。但在Unity中只有yield
。 如何实现可以并行排列yield
的方法?简单方式在C#平行
类似于Javascript中的Promise.all([])
,我们不关心哪一个先完成,我们只关心它们什么时候完成。
为了给出更多的上下文,假设你正在设计一个程序性地形生成器,它生成大块;你已经设置每个块生成使用ThreadPool
,然后提供一个返回IEnumerator
的API:
IEnumerator GenerateChunk() {
// procedural generation
// queue itself onto a ThreadPool
// when done, yield
}
IEnumerator GenerateChunks() {
for (int i = 0; i < chunks.Length; i++) {
yield return chunks[i].GenerateChunk();
}
}
void GenerateMap() {
StartCoroutine(GenerateChunks());
}
我们可以这样做yield IEnumerator[]
?
更新:我不知道我说清楚了我。基本上我想立刻开始所有的GenerateChunk
,并让他们尽快完成,而不是一个接一个地让步。
是我的代码已经这样做,或者我需要什么?
正确的答案可能是'Enumerable.Concat()'http://stackoverflow.com/questions/1270024/nested-yield-return-with-ienumerable – bitinn
** TL; DR:以上所有忽略,我的问题是[更好地在这里总结](http://forum.unity3d.com/threads/difference-between-yield-return-ienumerator-and-yield-return-startcoroutine.432571/)。我很抱歉没有在一开始就明确这一点。** – bitinn