Quando eu corro
use tokio::sync::mpsc;
#[tokio::main(flavor = "multi_thread", worker_threads = 1)]
async fn main() {
let (tx, mut rx) = mpsc::channel(1);
tokio::spawn(async move {
while let Some(i) = rx.recv().await {
println!("got = {}", i);
}
});
for i in 0..5 {
// busy calculation
std::thread::sleep(std::time::Duration::from_millis(10));
match tx.try_send(i) {
Ok(_) => {
println!("sent = {}", i);
},
Err(err) => {
println!("{}", err);
}
};
};
}
Eu obtive
sent = 0
got = 0
sent = 1
got = 1
sent = 2
got = 2
sent = 3
got = 3
sent = 4
Pelo que entendi, o único trabalhador está trabalhando no loop for porque ele nunca rende. O único trabalhador não deve ter chance de trabalhar no recebimento. Portanto, o canal deve estar cheio após o primeiro envio. Acontece que estou errado. O que estou perdendo?