En este post te voy a explicar las diferencias entre los métodos Task.WaitAll y Task.WhenAll en C#.
Antes de empezar.
- Ambos métodos sirven para trabajar en paralelo la ejecución de Tasks y/o métodos async.
 - Los métodos en cuestión entregarán el control una vez que hayan finalizado.
 - En la mayoría de los casos su uso es intercambiable, y usar uno u otro no te va a ofrecer alguna mejora de desempeño.
 
Entonces, ¿Cuáles son las diferencias?.
- Task.WaitAll es bloqueante, esto significa que ninguna sentencia posterior y que este dentro del método que ejecuta Task.WaitAll podrá ejecutarse hasta que el componente haya finalizado o arroje error.
 - Task.WaitAll maneja el sistema de errores mediante AggregateExceptions, vas a tener que inspeccionar los InnerExceptions para hacer el manejo de errores.
 - Task.WaitAll no retorna resultados, debes asignar las Tasks a una variable, de lo contrario las perderás los Results.
 - Task.WhenAll es awaitable, esto significa que tendrás que hacer uso de la palabra reservada await o forzar a la Task a esperar de algún modo.
 - Task.WhenAll desempaca las AggregateExceptions, si ocurre algún error en tus Tasks paralelas, se arrojara el primer error producido por las estas.
 - Task.WhenAll puede retornar los Results en la tarea que crea, no es necesario mantener las Tasks en una variable si solo necesitas el resultado de estas.
 - Si usas await con Task.WhenAll, es posible que tengas que convertir el método de cuestión a async.
 
Procesamiento con Task.WaitAll().
Procesamiento con Task.WhenAll().
Últimas entradas de Gustavo Sánchez (ver todo)
- NVL in SQL Server - 2023-11-01
 - ¿Que es Cake Build? - 2023-02-22
 - #How to fix error: MSB4019: The imported project «Microsoft.Data.Tools.Schema.SqlTasks.targets» was not found - 2023-02-20