考虑我有这样的代码:
import 'dart:async';
foo() {
print('foo');
}
bar() {
print('bar');
}
void main() {
runZoned(() {
new Timer(const Duration(seconds: 1), foo);
new Timer(const Duration(seconds: 2), bar);
});
}
如何知道区域内的所有异步工作何时完成?也就是说,是否有可能知道区域内注册的所有异步方法(通过计时器,未来等)何时完成?
答案 0 :(得分:4)
最初区域确实有一个" onDone"打回来。 (参见旧测试中的用法here)。然而,我们发现很难跟踪未完成的回调。例如:future.then(callback)
注册一个回调,但绝对不能保证将调用此回调。
事实上,期货从未完成是很常见的。区域本身对此有所贡献:当错误源自具有错误处理程序的区域时,错误将永远不会离开区域。这意味着区域外的未来链条将无法完成(既没有值也没有被区域截获的错误)。
TL; DR:我们在区域上有onDone
但已将其删除,因为它不切实际。
答案 1 :(得分:0)
我也试图发现这一点 似乎异步队列未在Dart中实现,而是由VM管理 运行Dart代码的隔离区会收到一条消息来运行已注册的回调。
有可能创建一个派生区域,对预定任务进行一些记录(在提交对默认实现的调用之前添加到自己的队列中,并且还包装回调以在调用回调时得到通知,以删除它从队列中。)
我希望有人能提出更好的答案。