Tengo varias tareas que devuelven el mismo tipo de objeto al que quiero llamar usando Task.WhenAll(new[]{t1,t2,t3}); y leer los resultados.
Cuando trato de usar
Task<List<string>> all = await Task.WhenAll(new Task[] { t, t2 }).ConfigureAwait(false);me sale un error del compilador
No se puede convertir implícitamente el tipo 'void' a
'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>
ambas tareas están llamando a un método similar a este.
private Task<List<string>> GetFiles(string path) { files = new List<string>(); return Task.Run(() => { //remove for brevity return files; }); }Parece que está utilizando la sobrecarga de WaitAll() que no devuelve un valor. Si realiza los siguientes cambios, debería funcionar.
List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 }) .ConfigureAwait(false);El tipo de devolución de WhenAll es una tarea cuyo tipo de resultado es una matriz del tipo de resultado de las tareas individuales, en su caso Task<List<string>[]>
Cuando se usa en una expresión de espera, la tarea se "desenvolverá" en su tipo de resultado, lo que significa que el tipo de su variable "todos" debe ser List<string>[]