C # 5 await
anahtar kelimesine benzer Unity 5, bitirmek için coroutines ve asenkron işlemler için beklemek için genel / yeniden kullanılabilir bir yol arıyorum .
Düşünebildiğim en basit yol şudur:
public class SomeUtility {
public bool IsDoingSomething { get; private set; }
public IEnumerator DoSomethingAsync() {
IsDoingSomething = true;
yield return new WaitForSeconds(2);
IsDoingSomething = false;
}
}
ve sonra başka bir programda:
while(!someUtilityInstance.IsDoingSomething)
yield return null;
Ancak bu çok hoş değil, çünkü kodları while
deyimlerle karıştırıyor, tekrar kullanılamıyor (basit yardımcı fonksiyonlar için bile örneklere ve özel sınıflara ihtiyaç duyuyor!)
Bulduğum en yakın Unity's kullanıyor AsyncOperation
. Burada çok güzel çalışıyor:
public static IEnumerator Await(this AsyncOperation operation) {
while(!operation.isDone)
yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();
Ancak .. sorun: Nasıl oluşturulur AsyncOperation
? Örnek SceneManager
olarak birkaç hizmet bunu kullanıyor, ancak belgelerde özel işlemler oluşturma veya mevcut ortak programları sarma vb. Hakkında hiçbir şey yok.
Öyleyse, özel koroutinler için basit, genel ve resuable bir "beklemenin" bir yolu var mı?