我通过试验发现创建一个持续时间为0的计时器允许我将工作推迟到事件队列中。我非常喜欢这个功能,因为它可以避免很多令人讨厌的重入问题。这种有意识的功能是否会改变?它可以添加到文档中吗?如果没有,是否有支持的方法来做到这一点?
答案 0 :(得分: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/
目前,答案是肯定的,new Timer(0, callback)
是推迟函数调用的最简单方法。
很快,希望http://dartbug.com/5691将被修复,并且会有更好的方法。 Timer的问题是HTML规范说回调应该在4ms之后发生。取决于您正在做的事情,可能存在问题。
Microsoft引入setImmediate()
来解决此问题。在重绘之后,它会在下一个事件循环开始时调用回调。我在Dart中的首选解决方案是将Future.immediate()
推迟到下一个事件循环,并且可能是像defer()
这样的函数进行回调。
但即使有更好的解决方案,new Timer(0, f)
仍然有用。我不介意为它做一个lint警告。