Tüm async görevlerinin tamamlanmasını beklemeye karar vermemeye çalışıyorum. İşte Task.WhenAll() öğesine iletilen görevlerde ConfigureAwait (false) kullanma
ben bunu denedim bu yüzden senkronizasyon bağlam alakalı değildir oldukça eminim Şu anda[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);
}
sahip koddur.
[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);
}
sorun artık o Yapılandırılan Görev Awaiatables kabul etmeyecektir, çünkü Task.WhenAll geçersiz argümanlar vardır.
Yani Task.WhenAll Bu henüz neredeyse her kimse o kötü kokan eğer ", onu kullanın edilir ConfigureAwait hakkında söyleyecek bir şeyi yok, bana doğru görünmüyor bu
await t1; await t2; await t3; await t4;
ile değiştirilmesi gerekmektedir t hatası ". Ve bildiğim kadarıyla (görevleri ben yazmadım), Senkronize Bağlamı kullanmıyorlar, ne de ona güveniyorlar.
Dikkat edilmesi gereken önemli Görev1'in görev4'ten önceki bir son işlemeye güvenmediği için aynı anda çalışmasını istiyorum. Sonuç olarak, her görev için beklemek istemiyorum. Ama Json cevabını tüm 4 tamamlanana kadar iade etmek istemiyorum, bu yüzden şu anki kodda Task.WhenAll() 'ı beklemiyorum. Aslında await
gerçekleştirdiğinizde
tanımlamak olurdu * ... * Daha iyi –
Ben gerçek sorunu ve sorunun biraz daha temsilci olmak için başlık güncellenmiş Eğer istiyorsan, onu değiştirebilirsin ama "hangisi daha iyi" soruları çözülüyorsa ve insanların asıl sorunuzu okumadıkları dizaltı reaksiyonlarına neden olacaklar. –
"Configure * Task *", "Configure * Task *" değil. –