gpt4 book ai didi

asynchronous - 为什么调用异步方法的方法需要异步?

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

考虑这个(教科书)示例 Dart 代码:

// Sequential processing using async and await.
main() async {
await expensiveA();
await expensiveB();
doSomethingWith(await expensiveC());
}

我了解 await 将等待 future “expensiveA”的结果完成后再继续。

但我不明白为什么 main() 本身必须被声明为异步的?显然你必须这样做,否则程序将无法编译。但是为什么同步方法不能等待异步调用的结果呢?

我知道这一定是一个新手问题,但我还没有找到答案。

最佳答案

之前 async/await ,它只是在不久前添加到 Dart 中的,你会这样写

main() {
var result = expensiveA()
.then((_) => expensiveB())
.then((_) => expensiveC()); // the Future returned by expensiveC will be returned because `doSomethingWith` is not awaited in your code
result.then(doSomethingWith);
return result;
}

异步调用返回 Future ,您可以将函数传递给它的 then异步调用完成时要调用的方法。

这段代码
main() async {
await expensiveA();
await expensiveB();
doSomethingWith(await expensiveC()); // doSomethingWith is not awaited
}

get 在执行之前被重写为类似于第一个代码块中的代码的内容。

这表明 async/ await不会改变代码的性质,它只会将语法更改为看起来更像同步代码的东西。
async是方法中代码需要重写的标记,该标记允许使用 await , 无需重写 await将没有任何意义。
async隐式返回最后一个 awaitFuture ,以便调用者能够 await完成此 Future .
因为一个 Future返回,强模式要求返回类型匹配。

关于asynchronous - 为什么调用异步方法的方法需要异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45978523/

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