繁体   English   中英

Dart Lang:避免使用异步标记所有函数

[英]Dart Lang: Avoid marking all functions with async

Dart 新手,我目前正在学习 Dart 中的异步执行。 我对 Dart 中的并发性如何工作感到有些恼火,从他们的代码实验室中获取以下场景:

void printOrderMessage () async {
  try {
    var order = await fetchUserOrder();
    print('Awaiting user order...');
    print(order);
  } catch (err) {
    print('Caught error: $err');
  }
}

Future<String> fetchUserOrder() {
  // Imagine that this function is more complex.
  var str = Future.delayed(Duration(seconds: 4), () => throw 'Cannot locate user order');
  return str;
}

Future<void> main() async {
  await printOrderMessage();
}

在这种情况下,异步操作是从数据库中获取用户订单。 现在因为 Dart 的 await/async 机制,每个与异步操作相关的函数都需要有一个Future<>返回类型,并且必须用async标记。

这感觉很笨重......想象一下,如果我的函数链深处的某个值被异步计算,我真的需要总是返回一个未来吗? 除了等待之外,还有其他结构可以同步 Dart 中的代码吗? 还是我误解了这个概念?

如果调用者需要能够等待您的异步操作完成,那么您的异步函数必须返回一个可以awaitFuture 这是会传染的; 如果这些调用者的调用者需要能够等待,那么他们也需要有Future等待。

如果主叫方应该等待,那么你可以有一个“发射后不管”,这并不需要返回一个函数Future

Future<void> foo() {
  // ...
}

// Does not need to return a Future.  Consequently, callers cannot
// directly determine when `foo` completes.
void bar() {
  foo();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM