gpt4 book ai didi

asynchronous - 为什么async-std的task::spawn阻止了后续代码行的执行?

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

我正在尝试使用async-std的task::spawn:

use std::time::Duration;

async fn w() {
loop {
task::sleep(Duration::from_secs(1)).await;
println!("Tick");
}
}

#[async_std::main]
async fn main() {
println!("Start");
task::spawn(w()).await;
println!("End");
}
我希望在“开始”之后立即打印“结束”,但是“循环”循环打印。
那么,以下内容到底有什么不同?
#[async_std::main]
async fn main() {
println!("Start");
w().await;
println!("End");
}

最佳答案

不要使用.await生成的任务。这样做就像加入线程:它等待任务完成才继续。无需等待spawn返回句柄即可将任务驱动完成。

task::spawn(w()).await;
如所写,您正确地认为 task::spawn(w()).awaitw().await没有什么不同。它们都阻塞了等待 w()完成的线程。
那么,等待生成调用的目的是什么?如果要生成后台任务,在当前线程上执行其他一些工作,然后阻塞,则很有用。
let handle = task::spawn(w());

do_other_things_for_a_while();

// Block and retrieve the result.
let result = handle.await;

关于asynchronous - 为什么async-std的task::spawn阻止了后续代码行的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62800852/

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