考虑我有这样的代码:
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);
});
}
我如何知道区域内的所有异步工作何时完成?也就是说,是否可以知道区域内注册的所有异步方法(通过计时器、 future 等)何时完成?
最佳答案
最初区域确实有一个“onDone”回调。 (请参阅旧测试 here 中的用法)。然而我们发现跟踪未完成的回调太难了。例如:future.then(callback)
注册一个回调,但绝对不能保证该回调将被调用。
事实上, future 从未完成的情况很常见。区域本身对此做出了贡献:当错误源自具有错误处理程序的区域时,错误将永远不会离开该区域。这意味着区域外的 future 链将不会完成(既没有值也没有被区域拦截的错误)。
TL;DR:我们在区域上设置了 onDone
,但由于不切实际而将其删除。
关于dart - 我如何知道我的代码何时完成 Dart 区域中的所有异步工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22034223/