較新的版本以產生陣列具有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