Her iki cevap da beklenenden bahsetmedi Task.WhenAll
:
var task1 = DoWorkAsync();
var task2 = DoMoreWorkAsync();
await Task.WhenAll(task1, task2);
Arasındaki temel fark, Task.WaitAll
ve Task.WhenAll
önceki olacak bloğu (kullanarak benzer olduğunu Wait
ikinci ise tek bir görev) ve tüm görevler bitene kadar arayana kontrol geri vererek, beklenen edilebilir olmayacaktır.
Dahası, istisna işleme farklıdır:
Task.WaitAll
:
Görev örneklerinden en az biri iptal edildi -veya- Görev örneklerinden en az birinin yürütülmesi sırasında bir istisna atıldı. Bir görev iptal edilirse, AggregateException kendi InnerExceptions koleksiyonunda bir OperationCanceledException içerir.
Task.WhenAll
:
Sağlanan görevlerden herhangi biri hatalı bir durumda tamamlanırsa, döndürülen görev de Hatalı bir durumda tamamlanır; burada istisnaları, sağlanan görevlerin her birinden kaydırılmamış istisnalar kümesinin toplanmasını içerecektir.
Sağlanan görevlerden hiçbiri başarısız olmaz, ancak en az biri iptal edilirse, döndürülen görev İptal durumunda sona erer.
Görevlerin hiçbiri başarısız olmazsa ve görevlerin hiçbiri iptal edilmezse, sonuçta ortaya çıkan görev RanToCompletion durumunda sona erer. Sağlanan dizi / numaralandırılabilir görev içermiyorsa, döndürülen görev, çağırana dönmeden hemen önce bir RanToCompletion durumuna geçer.
await Task.WhenAll(task1, task2);
mu?