whenall waitall example c# .net task-parallel-library console-application async-await

whenall - task waitall example c#



¿Cómo obtengo un valor de retorno de Task.WaitAll() en una aplicación de consola? (2)

No obtiene un valor de retorno de Task.WaitAll . Solo lo usa para esperar la finalización de múltiples tareas y luego obtener el valor de retorno de las tareas en sí.

var task1 = GetAsync(1); var task2 = GetAsync(2); Task.WaitAll(task1, task2); var result1 = task1.Result; var result2 = task2.Result;

Si solo tiene una sola Task , solo use la propiedad Result . Devolverá su valor y bloqueará el subproceso de llamada si la tarea aún no ha finalizado:

var task = GetAsync(3); var result = task.Result;

En general, no es una buena idea esperar (bloquear) de forma síncrona en una tarea asíncrona ("sincronización sobre asíncrono"), pero supongo que eso está bien para un POC.

Estoy usando una aplicación de consola como una prueba de concepto y una nueva necesidad de obtener un valor de retorno asíncrono.

Me di cuenta de que necesito usar Task.WaitAll() en mi método principal para evitar la necesidad de un método "main ()" asíncrono, que es ilegal.

Ahora estoy atascado tratando de descubrir una sobrecarga que me permite usar genéricos o simplemente devuelve un objeto que puedo lanzar, pero mientras estoy en Main ().


Para las mejores prácticas, use la nueva forma asíncrona de hacer las cosas. En lugar de

  • Task.WaitAll use await Task.WhenAll
  • Task.WaitAny use await Task.WhenAny

El código anterior se puede escribir como:

var task1 = GetAsync(1); var task2 = GetAsync(2); var results = await Task.WhenAll(task1, task2); var result1 = results[0]; var result2 = results[1];