5

実験の結果、継続時間が 0 のタイマーを作成すると、作業をイベント キューに延期できることがわかりました。この機能は、多くの厄介な再入可能性の問題を回避できるため、非常に気に入っています。これは変更されない意図的な機能ですか? ドキュメントに追加できますか?そうでない場合、これを行うためのサポートされている方法はありますか?

4

1 に答える 1

7

現在の回答

これを行う適切な方法は、scheduleMicrotask(Function callback).

こちらの API ドキュメントを参照してください: https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-async#id_scheduleMicrotask

非同期タスクとイベント ループに関する優れた記事はこちら: https://www.dartlang.org/articles/event-loop/

古い回答 (Dart 1.0 より前)

今のところ、答えはイエスnew Timer(0, callback)です。関数呼び出しを延期する最も簡単な方法です。

すぐにhttp://dartbug.com/5691が修正され、より良い方法が見つかることを願っています。Timer の問題は、HTML 仕様でコールバックが 4 ミリ秒以内に発生する必要があると規定されていることです。あなたが何をしているかによっては、それが問題になる可能性があります。

マイクロソフトはsetImmediate()これを解決するために導入しました。再描画の後、次のイベント ループの開始時にコールバックを呼び出します。Dart での私の推奨する解決策はFuture.immediate()、次のイベント ループまで延期することです。おそらく、そのような関数defer()はコールバックを受け取ります。

しかしnew Timer(0, f)、より良い解決策が利用可能になった後でも、引き続き機能します。ただし、糸くずの警告は気にしません。

于 2012-11-06T04:03:28.947 に答える