Функция spawn_ local
pub fn spawn_local<F>(future: F) -> JoinHandle<F::Output> ⓘ
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