【发布时间】:2017-12-07 23:55:39
【问题描述】:
我正在寻找async/await 实现的来源。
我想知道它们是如何真正工作的,以便侵入 future.then() 以检测是否有代码等待执行。
编辑
这是我愿意完成的:
TrackingCompleter completer = new TrackingCompleter();
TrackingFuture future = completer.future;
print("isAwaited: ${future.isAwaited} (F)");
new Future.delayed(new Duration(milliseconds: 500), () {
future.then((_) {
print("executing sorping");
print("isThenExecuted: ${future.thenExecuted} (F)");
new Future.delayed(new Duration(milliseconds: 500), () {
print("isThenExecuted: ${future.thenExecuted} (T)");
exit(1);
});
});
print("isAwaited: ${future.isAwaited} (T)");
print("isThenExecuted: ${future.thenExecuted} (F)");
completer.complete();
});
到目前为止,这是有效的。我现在想做的是检测future.then是在代码中手动调用还是使用await语句自动调用。
【问题讨论】:
-
AFAIK async/await 是编译器的一部分。代码被即时重写为
future.then(),并且仅以这种形式执行。也许您可以使用 Observatory dart-lang.github.io/observatory 调查事件队列以获取有关待处理任务的信息
标签: dart