Lanzar tareas en Rust
tokio::spawn entrega un futuro al runtime y devuelve un JoinHandle.
use tokio::time::{sleep, Duration};
async fn work(id: u32) -> u32 {
sleep(Duration::from_millis(10 * id as u64)).await;
id * id
}
#[tokio::main]
async fn main() {
let mut handles = Vec::new();
for id in 1..=4 {
handles.push(tokio::spawn(work(id)));
}
for handle in handles {
println!("{}", handle.await.unwrap());
}
}
Cómo funciona
- Las tareas son baratas: miles por hilo es lo normal.
- El handle se resuelve a la salida de la tarea.
- Un futuro lanzado debe ser
'static: mueve lo que necesita.
Palabras clave y builtins usados aquí
Vecasasyncawaitfnforinletmutu32u64use
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 320
- Tokens
- 107
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 58 segundos.
Paso 2 de 6 en Async con tokio; paso 10 de 15 en Concurrencia y async.