非同期操作/コルーチンを待つ方法は?


11

Unity 5でコルーチンと非同期操作が完了するのを待つ一般的で再利用可能な方法を探しています。C#5のawaitキーワードと同様です。

私が考えることができる最も簡単な方法は次のようなものです:

 public class SomeUtility {
     public bool IsDoingSomething { get; private set; }

     public IEnumerator DoSomethingAsync() {
         IsDoingSomething = true;
         yield return new WaitForSeconds(2);
         IsDoingSomething = false;
     }
 }

そして別のコルーチンで:

 while(!someUtilityInstance.IsDoingSomething)
     yield return null;

ただし、whileステートメントでコードが乱雑になり、再利用できず(単純なユーティリティ関数でもインスタンスと専用クラスが必要です!)、必要のない場所にシングルトンまたは静的なものがたくさんあるため、これはあまり良くありません。

私が見つけた最も近いものはUnityを使用していAsyncOperationます。これは非常にうまく機能します:

public static IEnumerator Await(this AsyncOperation operation) {
    while(!operation.isDone)
        yield return operation;
}

yield return SceneManager.LoadLevelAsync("blaaaah").Await();

ただし、問題は次のとおりAsyncOperationです。たとえば、いくつかのサービスSceneManagerはそれを使用していますが、カスタムオペレーションの作成や既存のコルーチンのラップなどについて、ドキュメントには完全に欠けています。

それで、カスタムコルーチンのためにシンプルで、一般的で、再利用可能な「待機」を作成する方法はありますか?


おそらく、リフレクションとコールバックを使用しますか?2つのメソッドをコルーチンに渡します。最初に行う方法。リフレクションを使用して、いつ終了するかを確認してから、2番目のコールを呼び出します
Evorlor

回答:



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.