2017-12-12 4 views
0

変数fooが以下に示すように偽になるまで、処理を停止するプログラムをDartlangで作成しました。 これは実行可能ですが、未来を返すことを続けている文は不器用です。 明確に書き込む方法はありますか?ダーツの非同期メソッドで "変数の変更を待つ"と書くのが良い方法はありますか?

Future asyncMethod() async { 

     while (foo) { 
     await new Future(() { 
      return null; 
     }); 
     } 

ユニティのコルーチンは、以下のように、単一の行に書き込むことができますので、私は、これは非常に明確にしたいと思います。

yield return new WaitWhile(() => foo); 

答えて

2

あなたはポーリングタイマーを使用した間隔で可変です。それを行う方法はたくさんあります。私は完全にストレートフォワードの実装のために行くだろう:その機能で

Future waitWhile(bool test(), [Duration pollInterval = Duration.zero]) { 
    var completer = new Completer(); 
    check() { 
    if (!test()) { 
     completer.complete(); 
    } else { 
     new Timer(pollInterval, check); 
    } 
    } 
    check(); 
    return completer.future; 
} 

、あなたはその後、ちょうど偽になることfooを待つ

await waitWhile(() => foo); 

を書くことができます。

+0

これは機能しました。どうもありがとうございました! – okamoto

関連する問題