async
/await
De maneira geral, o cĂłdigo async do Rust se parece muito com o cĂłdigo sequencial "normal":
use futures::executor::block_on; async fn count_to(count: i32) { for i in 1..=count { println!("Contador Ă©: {i}!"); } } async fn async_main(count: i32) { count_to(count).await; } fn main() { block_on(async_main(10)); }
Pontos chave:
-
Observe que este Ă© um exemplo simplificado para mostrar a sintaxe. NĂŁo hĂĄ operação de longa duração ou qualquer concorrĂȘncia real nele!
-
Qual Ă© o tipo de retorno de uma chamada async?
- Use
let future: () = async_main(10);
emmain
para ver o tipo.
- Use
-
A palavra-chave "async" Ă© açĂșcar sintĂĄtico. O compilador substitui o tipo de retorno por uma future.
-
VocĂȘ nĂŁo pode tornar
main
async, sem instruçÔes adicionais para o compilador sobre como usar a future retornada. -
VocĂȘ precisa de um executor para executar cĂłdigo async.
block_on
bloqueia o thread atual até que a future fornecida tenha sido executada até a conclusão. -
.await
espera assincronamente pela conclusão de outra operação. Ao contrårio deblock_on
,.await
nĂŁo bloqueia o thread atual. -
.await
só pode ser usado dentro de uma funçãoasync
(ou bloco; estes sĂŁo introduzidos mais tarde).