[工作經驗] Rust tokio 不想 await task 但卻想提早知道有沒有 error
假設我們想要平行地跑兩個 tasks A 和 B,我們用 async task A 來跑主要的程式,用 task B 來監控正在跑的程式。Task A 跑完了我們就不管 task B 可以直接結束程式了,所以 task B 我們並不想用 await 去等待他。 這時候就有一個小陷阱正在等著我們:如果 task B 提早發生錯誤,我們可能就會忘記去處理他。 壞程式 最近就不小心寫出像下面這樣的 code: use std::error::Error; #[tokio::main] async fn main() -> Result<(), Box<dyn Error>> { let task_a_handle = tokio::spawn(async move { tokio::time::sleep(tokio::time::Duration::from_secs(5)).await; if true { anyhow::bail!("Something went wrong in task A"); } else { Ok(()) } }); tokio::task::spawn_blocking(move || { std::thread::sleep(std::time::Duration::from_secs(1)); if true { anyhow::bail!("Something went wrong in task B"); } else { Ok(()) } }); match task_a_handle.await? { Ok(_) => println!("Finished"), Err(e) => panic!("Something wrong: {e}"), } Ok(()) } 我們可以看...