Rust · Avançado · Inglês · Técnico
Waker
Handle que uma tarefa async entrega ao executor para ser acordada. Quando o recurso fica pronto, quem o controla chama wake() e o executor faz o poll de novo.
Onde usar
Aparece ao implementar Futures à mão e executores. Ele vem dentro do Context passado ao poll.
Em código
use std::task::{Context, Waker};
let w = Waker::noop();
let mut cx = Context::from_waker(w);
// ao ficar pronta, a tarefa chama
// waker.wake() e o executor refaz o poll
let _ = &mut cx;Exemplos
Store the waker and call wake when data arrives.
Guarde o waker e chame wake quando chegarem dados.
The task hung because nobody called the waker.
A tarefa travou porque ninguém chamou o waker.
Cuidado
Guarde sempre o waker mais recente: sem um wake() a tarefa nunca acorda e fica parada em silêncio.