Wec*_*ski 1 asynchronous dart dart-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();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,异步操作是从数据库中获取用户订单。现在因为 Dart 的 await/async 机制,每个与异步操作相关的函数都需要有Future<>返回类型,并且必须用async.
这感觉很笨重......想象一下,如果我的函数链深处的某个值被异步计算,我真的需要总是返回一个未来吗?除了等待之外,还有其他结构可以同步 Dart 中的代码吗?还是我误解了这个概念?
如果调用者需要能够等待你的异步操作完成,那么你的异步函数必须返回一个Future可以被await编辑的。这是会传染的;如果这些调用者的调用者需要能够等待,那么他们也需要有Futures 等待。
如果来电者应该不等待,那么你可以有一个“发射后不管”,这并不需要返回一个函数Future:
Future<void> foo() {
// ...
}
// Does not need to return a Future. Consequently, callers cannot
// directly determine when `foo` completes.
void bar() {
foo();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |