跳到主要内容

spawn_local

搜索

函数 spawn_local 

源代码
pub fn spawn_local<F>(future: F) -> JoinHandle<F::Output> 
where F: Future + 'static, F::Output: 'static,
展开描述

在当前 LocalSetLocalRuntime 上生成一个 !Send future。

当显式使用这些类型之一,或者选择在 tokio::main 中使用 "local" 运行时风格时,这是可能的:

#[tokio::main(flavor = "local")]

生成的 future 将在调用 spawn_local 的同一线程上运行。

当调用 spawn_local 时,所提供的 future 将立即开始在后台运行,即使你没有 await 返回的 JoinHandle

§恐慌

如果在 LocalSetLocalRuntime 之外调用此函数,则会发生 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()
 }