gpt4 book ai didi

asynchronous - Dart Lang:避免使用异步标记所有功能

转载 作者:行者123 更新时间:2023-12-03 03:12:06 25 4
gpt4 key购买 nike

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中的代码吗?还是我误解了这个概念?

最佳答案

如果调用者需要能够等待异步操作完成,则您的异步函数必须返回可以被Future编辑的await。这具有传染性。如果这些 call 者的 call 者需要能够等待,那么他们也需要Future来等待。
如果调用者不应该等待,那么您可以使用“即发即忘”功能,无需返回Future:

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

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

关于asynchronous - Dart Lang:避免使用异步标记所有功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com