Zaman uyumsuz işlemleri / coroutines nasıl beklenir?


11

C # 5 awaitanahtar 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ı whiledeyimlerle 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 SceneManagerolarak 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ı?


Ya yansıma ve geri aramalar kullanıyor olabilirsiniz? İki yöntemi bir koroutine geçirin. İlki yapılacak yöntem. Ne zaman bittiğini görmek için yansımayı kullanın, sonra ikincisini arayın
Evorlor

Yanıtlar:



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.