Rust · Avançado · Inglês · Técnico
cancel safety
Propriedade de uma future que pode ser abandonada em um await, por exemplo dentro de select!, sem perder dados nem deixar o estado incoerente.
Onde usar
Aparece na documentação do tokio, que indica quais métodos são cancel safe. O recv de um canal é; ler parte de um buffer com read_exact não é.
Em código
use tokio::{select, time::{sleep, Duration}};
use tokio::sync::mpsc::Receiver;
async fn espera(mut rx: Receiver<u8>) {
select! {
m = rx.recv() => println!("{m:?}"),
_ = sleep(Duration::from_secs(1)) => {}
}
}Exemplos
Is this branch cancel safe inside select?
Esse ramo é cancel safe dentro do select?
read_exact is not cancel safe, you may lose bytes.
O read_exact não é cancel safe, você pode perder bytes.
Cuidado
Cancelar uma future só a descarta no ponto do await; os efeitos já feitos antes dele permanecem.
Sinônimos
segurança a cancelamento