sirve que programacion para metodo hacer getawaiter example ejemplos ejemplo como await async asincrono asincrona c# linq task-parallel-library async-await

que - task await c# ejemplo



Transforme IEnumerable<Task<T>> asincrónicamente al esperar cada tarea (1)

¿Qué pasa con esto?

await Task.WhenAll(tasks1); var gainStrings = tasks1.Select(t => t.Result).ToList();

Espere a que todas las tareas terminen y luego extraiga los resultados. Esto es ideal si no te importa en qué orden se terminan.

EDIT2: Aún mejor manera:

var gainStrings = await Task.WhenAll(tasks1);

Hoy me preguntaba cómo transformar una lista de tareas esperando cada una de ellas. Considere el siguiente ejemplo:

private static void Main(string[] args) { try { Run(args); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.ReadLine(); } } static async Task Run(string[] args) { //Version 1: does compile, but ugly and List<T> overhead var tasks1 = GetTasks(); List<string> gainStrings1 = new List<string>(); foreach (Task<string> task in tasks1) { gainStrings1.Add(await task); } Console.WriteLine(string.Join("", gainStrings1)); //Version 2: does not compile var tasks2 = GetTasks(); IEnumerable<string> gainStrings2 = tasks2.Select(async t => await t); Console.WriteLine(string.Join("", gainStrings2)); } static IEnumerable<Task<string>> GetTasks() { string[] messages = new[] { "Hello", " ", "async", " ", "World" }; for (int i = 0; i < messages.Length; i++) { TaskCompletionSource<string> tcs = new TaskCompletionSource<string>(); tcs.SetResult(messages[i]); yield return tcs.Task; } }

Me gustaría transformar mi lista de tareas sin el foreach, sin embargo, la sintaxis de la función anónima o la sintaxis de la función habitual me permiten hacer lo que hace mi foreach.

¿Tengo que confiar en mi foreach y en la List<T> o hay alguna forma de que funcione con IEnumerable<T> y todas sus ventajas?