Estoy buscando una forma genérica / reutilizable de esperar a que finalicen las rutinas y las operaciones asincrónicas en Unity 5, similar a la awaitpalabra clave de C # 5 .
La forma más simple que se me ocurre es algo como esto:
 public class SomeUtility {
     public bool IsDoingSomething { get; private set; }
     public IEnumerator DoSomethingAsync() {
         IsDoingSomething = true;
         yield return new WaitForSeconds(2);
         IsDoingSomething = false;
     }
 }y luego en otra corutina:
 while(!someUtilityInstance.IsDoingSomething)
     yield return null;Sin embargo, esto no es muy bueno porque satura el código con whiledeclaraciones, no es reutilizable (¡necesita instancias y clases dedicadas incluso para funciones de utilidad simples!) Y muchas cosas simples o estáticas donde ni siquiera es necesario.
Lo más cercano que encontré es usar Unity's AsyncOperation. Esto aquí funciona muy bien:
public static IEnumerator Await(this AsyncOperation operation) {
    while(!operation.isDone)
        yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();Sin embargo ... el problema es: ¿Cómo crear un AsyncOperation? Algunos servicios, por ejemplo, lo SceneManagerestán utilizando, pero la documentación carece por completo de crear operaciones personalizadas o envolver corutinas existentes, etc.
Entonces, ¿hay alguna manera de crear una "espera" simple, genérica y valiosa para las corutinas personalizadas?
fuente

Respuestas:
Esperará hasta que su método se haya completado, el único inconveniente con esa solución es que lo obliga a hacer esta llamada dentro de un
IEnumatormétodo.Ver http://docs.unity3d.com/ScriptReference/Coroutine.html
fuente
Con Unity 2017 ahora puede usar async await como alternativa a las corutinas como se describe aquí
fuente