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)即使有更好的解决方案可用,它仍然可以工作。不过,我不介意对它发出 lint 警告。

于 2012-11-06T04:03:28.947 回答