2

次のようなコードがあるとします。

import 'dart:async';

foo() {
  print('foo');
}

bar() {
  print('bar');
}

void main() {
  runZoned(() {
    new Timer(const Duration(seconds: 1), foo);
    new Timer(const Duration(seconds: 2), bar);
  });
}

ゾーン内のすべての非同期作業がいつ完了したかを知るにはどうすればよいですか? つまり、ゾーン内に登録されたすべての非同期メソッド (タイマー、フューチャーなどを介して) がいつ完了するかを知ることは可能ですか?

4

2 に答える 2

4

当初、ゾーンには「onDone」コールバックがありました。(ここで古いテストでの使用法を参照してください)。ただし、未処理のコールバックを追跡するのは非常に難しいことがわかりました。例:future.then(callback)コールバックを登録しますが、このコールバックが呼び出されるという保証はまったくありません。

実際、先物が完成しないことはよくあることです。ゾーン自体がこれに貢献します。エラーがエラー ハンドラーを持つゾーンで発生した場合、エラーは決してゾーンを離れることはありません。つまり、ゾーン外のフューチャーチェーンは完了しません (ゾーンによってインターセプトされた値もエラーもありません)。

TL;DR:onDoneゾーンはありましたが、非現実的だったので削除しました。

于 2014-02-26T13:00:20.717 に答える