我通过实验发现创建一个持续时间为 0 的计时器可以让我将工作推迟到事件队列中。我真的很喜欢这个功能,因为它可以避免很多讨厌的重入问题。这是不会改变的故意功能吗?可以添加到文档中吗?如果没有,是否有支持的方法来做到这一点?
问问题
346 次
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 回答