当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart Completer.sync用法及代码示例


dart:async 库中Completer.sync 的用法介绍如下。

用法:

Completer<T>.sync()

同步完成未来。

除非已知未来的完成是另一个异步操作的最终结果,否则应避免使用此构造函数。如果有疑问,请使用默认的 Completer 构造函数。

使用正常的异步完成程序永远不会给出错误的行为,但是错误地使用同步完成程序可能会导致正确的程序中断。

同步完成器仅用于在一个异步事件立即触发另一个事件时优化事件传播。除非保证对completecompleteError 的调用发生在不会破坏Future 不变量的地方,否则不应使用它。

同步完成意味着当在同步完成器上调用 completecompleteError 方法时,完成器的未来将立即完成,同步完成器也会调用在该未来上注册的任何回调。

同步完成不能违反这样的规则,即当您在未来添加回调时,在添加回调的代码完成之前不得调用该回调。因此,同步完成只能发生在另一个同步事件的最后(在"tail position"中),因为此时立即完成future相当于返回事件循环并在下一个完成future微任务。

例子:

var completer = Completer.sync();
// The completion is the result of the asynchronous onDone event.
// No other operation is performed after the completion. It is safe
// to use the Completer.sync constructor.
stream.listen(print, onDone: () { completer.complete("done"); });

不好的例子。不要使用此代码。仅用于说明目的:

var completer = Completer.sync();
completer.future.then((_) { bar(); });
// The completion is the result of the asynchronous onDone event.
// However, there is still code executed after the completion. This
// operation is *not* safe.
stream.listen(print, onDone: () {
  completer.complete("done");
  foo();  // In this case, foo() runs after bar().
});

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 Completer<T>.sync constructor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。