我func1, func2, func3在 struct 物件上有 3 種不同的異步方法
我想要完成的是 - 類似:
loop{
obj.func1().await;
set_timeout(Duration::from_secs(5)).await;
}
loop{
obj.func2().await;
set_timeout(Duration::from_secs(5)).await;
}
loop{
obj.func3().await;
set_timeout(Duration::from_secs(5)).await;
}
我希望所有這 3 個回圈并行運行。(顯然,它不起作用,因為第 2 和第 3 回圈將無法訪問!)
我想到了下面給出的解決方案,但它有兩個問題
loop {
thread::spawn(move || async move {
obj.func1().await;
obj.func2().await;
obj.func3().await;
set_timeout(Duration::from_secs(5)).await;
});
}
問題 1:我的結構不遵循 Copy 特征(使用一些 3rd 方板條箱,所以在那里不能做太多事情)
問題 2:由于每個函式呼叫都將在這里作為單獨的執行緒運行,我懷疑超時在這里是否能正常作業!
我應該如何處理這個?
提前致謝 !
uj5u.com熱心網友回復:
您可以使用一個async塊來創建一個新的未來,因此如果您將每個回圈包裝在一個async塊中,您將獲得三個未來。然后您可以使用join!宏同時等待它們:
let fut1 = async {
loop{
obj.func1().await;
set_timeout(Duration::from_secs(5)).await;
}
};
let fut2 = async {
loop{
obj.func2().await;
set_timeout(Duration::from_secs(5)).await;
}
};
let fut3 = async {
loop{
obj.func3().await;
set_timeout(Duration::from_secs(5)).await;
}
};
join!(fut1, fut2, fut3);
宏觀將join!推動期貨。
或者,您的異步運行時可能有一種方法可以將未來作為新的獨立任務提交,例如tokio::spawn.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482814.html
上一篇:如果boost::asio::thread_pool::join已經在作業時呼叫boost::asio::post會發生什么?
