跳到主要内容

spawn_local

搜索

函数 spawn_local 

Source
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 将立即开始在后台运行, 即使你没有等待返回的 JoinHandle

§Panics

如果在 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();

// 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()
 }