我試圖決定如何等待所有異步任務完成。傳遞給Task.WhenAll()失敗的任務時使用ConfigureAwait(false)
下面是代碼我現在有
[HttpGet]
public async Task<JsonResult> doAsyncStuff()
{
var t1 = this.service1.task1();
var t2 = this.service2.task2();
var t3 = this.service3.task3();
var t4 = this.service4.task4();
await Task.WhenAll(t1,t2,t3,t4);
return this.Json(new {redirect = true, href = Url.Action("Blah")}, JsonRequestBehavior.AllowGet);
}
我敢肯定的同步上下文是不相關的,所以我嘗試這樣做。
[HttpGet]
public async Task<JsonResult> doAsyncStuff()
{
var t1 = this.service1.task1().ConfigureAwait(false);
var t2 = this.service2.task2().ConfigureAwait(false);
var t3 = this.service3.task3().ConfigureAwait(false);
var t4 = this.service4.task4().ConfigureAwait(false);
await Task.WhenAll(t1,t2,t3,t4);
return this.Json(new {redirect = true, href = Url.Action("Blah")}, JsonRequestBehavior.AllowGet);
}
的問題是現在Task.WhenAll有無效的參數,因爲它不會接受配置的任務Awaiatables。
所以Task.WhenAll需要與此
await t1; await t2; await t3; await t4;
更換這似乎不是正確的我,但幾乎無處不任何人有什麼說ConfigureAwait它是「使用它,如果它不」 t錯誤「。據我所知(我沒有寫任務),他們不使用同步上下文,也不依賴它。
重要提示我希望task1到task4同時運行,因爲它們不依賴於前一個完成。因此,我不想在每個任務前等待。但是我不想返回Json響應,直到完成所有4個響應爲止,這就是爲什麼我當前在當前代碼中具有正在等待Task.WhenAll()的原因。
定義*更好* ... –
我更新您的標題是一個小更具有代表性的實際問題和問題你有,如果你想,你可以改回它,但「哪個更好」的問題是不被接受的,並且可能會導致人們沒有閱讀你真正的問題的膝蓋反應。 –
這是「Configure * Await *」,而不是「Configure * Task *」。 –