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
将立即开始在后台运行,
即使你没有等待返回的
JoinHandle。
§Panics
如果在
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();
// Run the local task set.
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()
}