Spec-Zone.ru › Tokio

Функция spawn_local

pub fn spawn_local<F>(future: F) -> JoinHandle<F::Output> ⓘ
where F: Future + 'static, F::Output: 'static,
Доступно только при включённой возможности crate rt.

Запускает задачу Future !Send в текущем LocalSet или LocalRuntime.

Это возможно при явном использовании одного из этих типов или при выборе режима среды выполнения "local" в tokio::main:

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

Запущенная задача Future будет выполняться в том же потоке, который вызвал spawn_local.

Переданная задача Future начнёт выполняться в фоновом режиме сразу после вызова spawn_local, даже если вы не ожидаете возвращённый JoinHandle.

Паники

Эта функция вызывает панику, если её вызвать вне LocalSet или LocalRuntime.

Обратите внимание: если вызвать tokio::spawn изнутри LocalSet, созданная задача не будет находиться внутри 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;

С локальным режимом среды выполнения.

#[tokio::main(flavor = "local")]
async fn main() {
    let join = tokio::task::spawn_local(async {
        println!("my nonsend data...")
    });

   join.await.unwrap()
 }

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/task/fn.spawn_local.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API