tokio::select!
について調べていた。これは、複数の Future をこのマクロに与えたブロックの中で並べてあげると、それらのうちどれか一つが完了したらそれ以外をすべて cancel し、当該 Future が吐いたデータに関する処理を実施するもの。poll 中は実行がブロッキングされるので、非同期に実施したいならば
tokio::select!
の利用箇所自体を別のスレッドで実行したりすべきであるようだ。
https://ratatui.rs/tutorial/counter-async-app/async-event-stream.html
いつまでたってもデータを吐き続けるような stream があるときは、shutdown などの優先されるべき Future をちゃんと見てもらうためにも biased な設定をあえて入れることができる。
https://docs.rs/tokio/latest/tokio/macro.select.html#fairness