gpt4 book ai didi

rust - tokio::spawn(my_future).await 和只是 my_future.await 有什么区别?

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

给定一个异步函数及其对应的 future ,让我们说:

async fn foo() -> Result<i32, &'static str> {
// ...
}

let my_future = foo();
仅使用 .await 而不是使用 tokio::spawn().await 等待它有什么区别?
// like this...
let result1 = my_future.await;

// ... and like this
let result2 = tokio::spawn(my_future).await;

最佳答案

通常不会等待衍生的任务(或至少不会立即等待)。更常见的是简单地写:

tokio::spawn(my_future);
省略 .await并且该任务将在当前任务继续时在后台运行。立即调用 .await阻止当前任务。 spawn(task).await实际上与 task.await 没有什么不同.这类似于创建一个线程并立即加入它,这同样没有意义。
生成的任务不需要像裸 future 那样等待。等待他们是可选的。那么,什么时候可能想要等待一个呢?如果要阻止当前任务,直到生成的任务完成。
let task = tokio::spawn(my_future);

// Do something else.
do_other_work();

// Now wait for the task to complete, if it hasn't already.
task.await;
或者,如果您需要结果,但需要在开始任务和收集结果之间进行工作。
let task = tokio::spawn(my_future);

// Do something else.
do_other_work();

// Get the result.
let result = task.await;

关于rust - tokio::spawn(my_future).await 和只是 my_future.await 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62595857/

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