Dart:使用零持续时间计时器是将工作延迟到事件循环的支持方式

Jim*_*ton 5 timer event-loop reentrancy deferred-execution dart

我通过实验发现创建一个持续时间为0的计时器允许我将工作推迟到事件队列中.我非常喜欢这个功能,因为它可以避免很多令人讨厌的重入问题.这种有意识的功能是否会改变?它可以添加到文档中吗?如果没有,是否有支持的方式来做到这一点?

Jus*_*ani 6

目前的答案

这样做的正确方法是scheduleMicrotask(Function callback).

请参阅此处的API文档:https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-async#id_scheduleMicrotask

关于异步任务和事件循环的一篇很棒的文章在这里:https://www.dartlang.org/articles/event-loop/

旧答案(前飞镖1.0)

现在,答案是肯定的,new Timer(0, callback)是推迟函数调用的最简单方法.

很快,希望http://dartbug.com/5691将被修复,并且会有更好的方法.Timer的问题是HTML规范说回调应该在4ms之后发生.取决于你正在做什么,这可能是问题.

微软推出setImmediate()解决此问题.在重绘之后,它会在下一个事件循环开始时调用回调.我在Dart中的首选解决方案是Future.immediate()推迟到下一个事件循环,并且可能像defer()这样的函数进行回调.

new Timer(0, f)即使有更好的解决方案,仍然可以工作.我不介意它的皮棉警告.