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

Timer Dart:使用零持续时间计时器是将工作延迟到事件循环的受支持方式吗,timer,dart,deferred-execution,event-loop,reentrancy,Timer,Dart,Deferred Execution,Event Loop,Reentrancy,我通过实验发现,创建一个持续时间为0的计时器可以将工作延迟到事件队列中。我真的很喜欢这个特性,因为它可以避免很多令人讨厌的重入问题。这是不会改变的故意功能吗?是否可以将其添加到文档中?如果没有,是否有支持的方法执行此操作?当前答案 正确的方法是使用scheduleMicrotask(函数回调) 请参见此处的API文档: 下面是一篇关于异步任务和事件循环的优秀文章: 旧答案(Dart前1.0版) 现在,答案是肯定的,新定时器(0,回调)是延迟函数调用的最简单方法 希望很快就能修好,会有更好的办法。

我通过实验发现,创建一个持续时间为0的计时器可以将工作延迟到事件队列中。我真的很喜欢这个特性,因为它可以避免很多令人讨厌的重入问题。这是不会改变的故意功能吗?是否可以将其添加到文档中?如果没有,是否有支持的方法执行此操作?

当前答案 正确的方法是使用
scheduleMicrotask(函数回调)

请参见此处的API文档:

下面是一篇关于异步任务和事件循环的优秀文章:

旧答案(Dart前1.0版) 现在,答案是肯定的,
新定时器(0,回调)
是延迟函数调用的最简单方法

希望很快就能修好,会有更好的办法。计时器的问题是HTML规范说回调应该不早于4ms后发生。取决于你在做什么,这可能是个问题

微软推出了
setImmediate()
来解决这个问题。在任何重画之后,它在下一个事件循环开始时调用回调。我在Dart中的首选解决方案是使用
Future.immediate()
延迟到下一个事件循环,并可能使用类似于
defer()
的函数进行回调


但是新的定时器(0,f)仍然可以工作,即使在有更好的解决方案可用之后。尽管如此,我不介意一个线头警告。

糟糕,4毫秒的延迟是不幸的。“推迟”(并拥有未来。立即使用它)听起来很棒。现在,我可以编写一个延迟函数,用定时器来伪造它。我认为这真的很重要。在转发调用中被回调总是会导致事件驱动代码中出现棘手的错误。另一件很酷的事情是能够创建一个紧急事件来“跳过队列”。有时,您希望这样做是为了能够在处理任何排队事件之前立即更改状态。我更新了答案以反映异步API的当前状态,这会更好。我相信现在所有受支持的浏览器(IE 10+)都应该取消4ms延迟。