Concorrenza e Async
future cannot be sent between threads safely: `Rc<T>` / `RefCell<T>` held across `.await` point – Rust SEND_HELD_ACROSS_AWAIT
Le funzioni asincrone eseguite su un thread pool multi-thread (come 'tokio::spawn') richiedono che la Future risultante sia 'Send'; trattenere tipi non thread-safe (come 'Rc', 'RefCell' o 'std::sync::MutexGuard') tra due chiamate '.await' viola questo vincolo.
Cosa significa questo errore?
Le funzioni asincrone eseguite su un thread pool multi-thread (come 'tokio::spawn') richiedono che la Future risultante sia 'Send'; trattenere tipi non thread-safe (come 'Rc', 'RefCell' o 'std::sync::MutexGuard') tra due chiamate '.await' viola questo vincolo.
Messaggio originale
future cannot be sent between threads safely: `Rc<T>` / `RefCell<T>` held across `.await` pointContesto e parole chiave
Alias
- future cannot be sent between threads safely across await
Messaggi alternativi
- tipo non Send trattenuto attraverso un punto di await
Prodotti
- Rust Compiler (rustc) / Cargo / Tokio
Piattaforme
- Linux
- macOS
- Windows
Parole chiave
- cargo
- Concorrenza e Async
- errore-rust-non-send-type-held-across-await
- rust
- rust.async.send-not-implemented-held-across-await
- rustc
- SEND_HELD_ACROSS_AWAIT
Cause possibili
Origine del problema per Errore Rust Async: Tipo Non-Send Trattenuto Attraverso un Punto di '.await'
Le funzioni asincrone eseguite su un thread pool multi-thread (come 'tokio::spawn') richiedono che la Future risultante sia 'Send'; trattenere tipi non thread-safe (come 'Rc', 'RefCell' o 'std::sync::MutexGuard') tra due chiamate '.await' viola questo vincolo.
molto comuneDiagnosi
Verifica di compilazione e diagnostica per Errore Rust Async: Tipo Non-Send Trattenuto Attraverso un Punto di '.await'
Eseguire cargo check o cargo clippy per visualizzare l'output dettagliato con spiegazione esplicita del compilatore.
Come leggere il risultato. Fornisce la riga esatta, il diagramma dei prestiti (borrow) o lo stack trace del panic.
cargo checkRisoluzione
Risoluzione per Errore Rust Async: Tipo Non-Send Trattenuto Attraverso un Punto di '.await'
Applicare la correzione al codice Rust secondo le regole del borrow checker, traits o concorrenza.
- Ispezionare la riga evidenziata dal compilatore rustc o lo stack trace del panic
- Riformulare la gestione dell'ownership, l'uso di smart pointer (Arc/Mutex) o le chiamate async
- Eseguire cargo check e cargo test per confermare la piena stabilità
cargo checkDomande frequenti
Come risolvere l'errore Errore Rust Async: Tipo Non-Send Trattenuto Attraverso un Punto di '.await' in Rust?
Le funzioni asincrone eseguite su un thread pool multi-thread (come 'tokio::spawn') richiedono che la Future risultante sia 'Send'; trattenere tipi non thread-safe (come 'Rc', 'RefCell' o 'std::sync::MutexGuard') tra due chiamate '.await' viola questo vincolo.
Approfondimenti
- Rust Compiler Error Index / Rust Book documentazione_ufficiale