![](/img/trans.png)
[英]What is the difference between Task.Run() and await Task.Run()?
[英]What is a good alternative to await Task.Run executing an asyncronous lambda?
我正在使用BackgroundWorker
升級舊代碼。 根據 Stephen Cleary 就此事發表的一系列文章,我認為在這種情況下理想的替代品是Task.Run()
。
我的是 Windows Forms 應用程序。 根據BackgroundWorker
模式,在構造 Form 時,將啟動不同的后台操作並將其結果收集在不同的事件處理程序中。
現在,我的新方法遵循 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 需要是異步的,因為它們在方法主體中進行的調用是對異步方法的。
我不能以簡單的 await 連續調用它們:
private async void FormEventHandler(object sender, EventArgs e)
{
await AwaitableLongRunningTask_1();
await AwaitableLongRunningTask_2();
//...
}
因為它們需要並行啟動,而且它們顯然是跨越幾秒鍾的長時間運行的任務。
所以我的問題是,我是否需要將 AwaitableLongRunningTasks 重構為非異步 void,改變它們的內部行為,如“如何從同步方法調用異步方法”中所建議的那樣? 我錯過了更好的選擇嗎?
使用Task.WhenAll
private async void FormEventHandler(object sender, EventArgs e)
{
await Task.WhenAll(
AwaitableLongRunningTask_1(),
AwaitableLongRunningTask_2());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.