我正在使用BackgroundWorker. 繼 Stephen Cleary就此事發表的一系列文章之后,我認為在這種情況下理想的替代品是Task.Run().
我的是一個 Windows 表單應用程式。構造 Form 時,根據BackgroundWorker模式啟動不同的后臺操作,并將其結果收集在不同的事件處理程式中。
現在,我的新方法遵循 async/await 模式。我對呼叫異步方法有一些擔憂Task.Run()。
private async void FormEventHandler(object sender, EventArgs e)
{
Task.Run(async () => await AwaitableLongRunningTask_1());
Task.Run(async () => await AwaitableLongRunningTask_2());
//...
}
AwaitableLongRunningTask_1 和 _2 需要是異步的,因為它們在方法體中進行的呼叫是對異步方法的。
我不能以簡單的等待順序呼叫它們:
private async void FormEventHandler(object sender, EventArgs e)
{
await AwaitableLongRunningTask_1();
await AwaitableLongRunningTask_2();
//...
}
因為它們需要并行啟動,而且它們顯然是跨越幾秒鐘的長時間運行的任務。
所以我的問題是,我是否需要將 AwaitableLongRunningTasks 重構為非異步無效,改變它們的內部行為,如“如何從同步方法呼叫異步方法”中建議的那樣?我錯過了更好的選擇嗎?
uj5u.com熱心網友回復:
用 Task.WhenAll
private async void FormEventHandler(object sender, EventArgs e)
{
await Task.WhenAll(
AwaitableLongRunningTask_1(),
AwaitableLongRunningTask_2());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/371691.html
標籤:C# 。网 winforms 任务并行库 .net-framework-4.8
上一篇:為什么List中的委托在通過for回圈插入時總是相等的,但在沒有回圈的情況下不相等
下一篇:測驗時奇怪的處理行為
