Более новая версия C# имеет async
/await
. Но в Unity есть только yield
. Как реализовать метод, в котором я могу использовать yield
?Простой способ получения массива параллельно
Как и в случае с Promise.all([])
в Javascript, нам все равно, кто заканчивается первым, нам все равно, когда все будет сделано.
Чтобы представить больше контекста, представьте, что вы проектируете процедурный генератор рельефа, который генерирует в кусках; и вы уже настроили каждый кусок, чтобы генерировать с помощью ThreadPool
, а затем предоставить API, который возвращает IEnumerator
:
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