我通過試驗發現創建持續時間爲0的定時器允許我將工作推遲到事件隊列中。我非常喜歡這個功能,因爲它可以避免很多令人討厭的重入問題。這種有意義的功能不會改變嗎?可以將它添加到文檔中嗎?如果沒有,是否有支持的方式來執行此操作?Dart:使用零持續時間定時器支持延遲工作到事件循環的方式
5
A
回答
5
當前回答
正確的方式做,這是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規範說回調應該在4ms之後發生。取決於你在做什麼,可能會有問題。
微軟推出setImmediate()
來解決這個問題。它在任何重繪之後在下一個事件循環開始時調用回調。我在Dart的首選解決方案是讓Future.immediate()
推遲到下一個事件循環,並可能需要一個回調函數如defer()
。
但即使在有更好的解決方案後,new Timer(0, f)
仍然可以工作。儘管如此,我並不介意它的皮棉警告。
相關問題
- 1. 延遲與0.1秒的持續時間
- 2. SQL事件探查器持續時間與SSMS持續時間
- 3. 調整「for」循環的持續時間
- 4. 在jquery動畫中指定不同的延遲/持續時間?
- 5. Chart.js(折線圖)工具提示持續時間/延遲
- 6. 使循環延遲一段時間
- 7. 指定時間的mootool事件延遲
- 8. ActionScript - 補間持續時間爲零?
- 9. 兩次連續的KeyDown事件之間的延時延遲
- 10. 設置的持續時間將被延遲xhr.onload
- 11. 帶時間延遲的文本循環
- 12. while循環中的時間延遲
- 13. 延長計時器的持續時間,同時勾選
- 14. 終止持續工作時間在特定時間後
- 15. 格式化持續時間到Google工作表中的號碼
- 16. 持續時間
- 17. Android日曆事件持續時間(API)
- 18. 滾動事件持續多長時間?
- 19. 十大事件持續時間
- 20. FullCalendar - 默認事件持續時間
- 21. 持續循環
- 22. jQuery持續時間方法
- 23. jquery toggleClass持續時間不工作
- 24. panTo()持續時間不工作?
- 25. do-while循環不會持續工作
- 26. 時間延遲和遊戲循環
- 27. 爲循環添加時間延遲
- 28. jQuery的定時/循環延遲
- 29. 延長動畫持續時間 - CSS3
- 30. 延長CruiseControl.NET會話持續時間
Yuck,4ms的延遲是不幸的。 「推遲」(並有Future.immediate使用它)聽起來不錯。現在,我可以編寫一個延遲函數,用定時器來僞造它。我認爲這非常重要。在您的轉發呼叫中回叫會導致事件驅動代碼中的棘手錯誤。另一件很酷的事情是能夠創建一個「跳過隊列」的緊急事件。有時候你想要做到這一點,以便能夠在處理任何排隊事件之前立即改變狀態。 –
我更新了我的答案以反映異步API的當前狀態,這更好。我相信現在所有支持的瀏覽器(IE 10+)都應該延遲4ms延遲。 –