pub fn spawn_local<F>(future: F) -> JoinHandle<F::Output> ⓘ展开描述
在当前 LocalSet 或 LocalRuntime 上生成一个 !Send future。
当显式使用这些类型之一,或者选择在 tokio::main 中使用 "local" 运行时风格时,这是可能的:
ⓘ
#[tokio::main(flavor = "local")]生成的 future 将在调用 spawn_local 的同一线程上运行。
当调用 spawn_local 时,所提供的 future 将立即开始在后台运行,即使你没有 await 返回的 JoinHandle。
§恐慌
如果在 LocalSet 或 LocalRuntime 之外调用此函数,则会发生 panic。
请注意,如果在 LocalSet 内使用 tokio::spawn,则生成的新任务将不会位于 LocalSet 内,因此如果你想停留在 LocalSet 内,必须使用 spawn_local。
§示例
使用 LocalSet:
use std::rc::Rc;
use tokio::task;
let nonsend_data = Rc::new("my nonsend data...");
let local = task::LocalSet::new();
// 运行本地任务集。
local.run_until(async move {
let nonsend_data = nonsend_data.clone();
task::spawn_local(async move {
println!("{}", nonsend_data);
// ...
}).await.unwrap();
}).await;使用 local 运行时风格。
#[tokio::main(flavor = "local")]
async fn main() {
let join = tokio::task::spawn_local(async {
println!("my nonsend data...")
});
join.await.unwrap()
}