luc*_*ian 1 asynchronous spawn rust async-await rust-tokio
我的 Rust 代码如下所示。
#[tokio::main]
pub async fn main() {
for i in 1..10 {
tokio::spawn(async move {
println!("{}", i);
});
}
}
Run Code Online (Sandbox Code Playgroud)
运行代码时,我希望它以随机顺序打印 1 到 10。但它只是打印一些随机数:
1
3
2
终端将被任务重复使用,按任意键关闭它。
为什么会发生这种情况?
https://docs.rs/tokio/latest/tokio/fn.spawn.html警告:
无法保证生成的任务将执行完成。当运行时关闭时,所有未完成的任务都将被删除,无论该任务的生命周期如何。
一种可行的解决方案是存储所有JoinHandles,然后await存储所有它们:
let mut join_handles = Vec::with_capacity(10);
for i in 1..10 {
join_handles.push(tokio::spawn(async move {
println!("{}", i);
}));
}
for join_handle in join_handles {
join_handle.await.unwrap();
}
Run Code Online (Sandbox Code Playgroud)
PS 在 中1..10,结尾是互斥的,因此最后一个数字是 9。您可能需要1..=10改为。(参见https://doc.rust-lang.org/reference/expressions/range-expr.html)
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |