8

ダーツイベントループがどのように機能するかを理解しようとしています。The Event Loop and Dartという Web サイトのイベント ループに関する記事を読んだところ、著者は dart のイベント ループがどのように機能するかについてかなり詳しく説明しています。

しかし、私が理解していないのは、イベントがキューを取得する方法です。例えば

new Future(() => 21)
    .then((v) => v*2)
    .then((v) => print(v));

ここで dart はイベント キューに 3 つのエントリを作成しますか、それとも 1 つだけ作成しますか? クラス Future が遅延実行を担当していることを知っています。それからオブジェクトを作成すると、

new Future(() => 21)

イベント ループの 1 つのエントリにすぎません。

上記のこの記事では、マイクロタスクについて読みました。このマイクロタスクはイベント キューの前に実行されますが、意味がわかりません。なぜ dart チームはこのマイクロタスクを実装するのですか? 多分私はいくつかの例が必要です!

4

4 に答える 4

1

マイクロタスク キューは、非同期実行をキューに入れますが、これらのマイクロタスクが完了する前にメイン イベント ループに戻らないようにします。メイン キューにキューイングされた他の非同期タスク/イベントが実行される前に非同期で実行された場合でも、一部の関連アクティビティを完全に完了することができます。

likeから実行されたコードは、常に a を返すため、 a 内で再度実行されるthenようです。(v) => v*2FuturethenFuture

https://www.dartlang.org/articles/event-loop/から

イベント処理コードは後でタスクを完了する必要がある場合があるため、マイクロタスク キューが必要になりますが、イベント ループに制御を返す前に。たとえば、監視可能なオブジェクトが変更されると、いくつかの突然変異の変更がグループ化され、非同期的に報告されます。マイクロタスク キューを使用すると、監視可能なオブジェクトは、DOM が矛盾した状態を示す前に、これらのミューテーションの変更を報告できます。

この説明をどのように解釈するかは、@Jare の回答のテストの結果と一致しません。

于 2014-06-04T06:22:37.273 に答える
1

以前の回答に少し追加します。「イベント ループ」の記事では、この動作について非常によく説明されています。

Future の then() メソッドに渡す関数は、Future が完了するとすぐに実行されます。(関数はキューに入れられず、呼び出されるだけです。)

( https://www.dartlang.org/articles/event-loop/ )

上記の例では、イベントは常に 1 つですが、マイクロタスクは多数あることを意味します。

于 2015-08-12T18:09:26.353 に答える