実験の結果、継続時間が 0 のタイマーを作成すると、作業をイベント キューに延期できることがわかりました。この機能は、多くの厄介な再入可能性の問題を回避できるため、非常に気に入っています。これは変更されない意図的な機能ですか? ドキュメントに追加できますか?そうでない場合、これを行うためのサポートされている方法はありますか?
1 に答える
現在の回答
これを行う適切な方法は、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)
、より良い解決策が利用可能になった後でも、引き続き機能します。ただし、糸くずの警告は気にしません。