dart - 我如何知道我的代码何时完成 Dart 区域中的所有异步工作?

标签 dart dart-async

考虑我有这样的代码:

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/

相关文章:

dart - 异步代码的 UnitTest 示例

Dart 限制同时连接

dart - 如何改写URL?

class - 如何在 flutter (dart) 中访问其他类的方法?

dart - 在Flutter中为窗口小部件定义自定义参数

dart - 我如何在 Dart 中执行相当于 setTimeout + clearTimeout 的操作?

flutter - 如何在抖动中更改国家/地区选择器的宽度?

flutter - 可扩展的底栏溢出

postgresql 打开连接并执行多个命令

Dart 计时器出了问题?