using System; using System.Threading; using System.Threading.Tasks; namespace Ch05_UsingCSharp5Dot0.R0504 { /// /// Clase demostración para la ejecución de tareas en paralelo. /// public class EjecucionParalelaConAwait { /// /// Inicia la ejecución de las tareas. /// public void Ejecutar() { Task tarea = ProcesamientoAsincronico(); tarea.Wait(); } /// /// Configura la ejecución de tareas para procesamiento asincrónico. /// /// Tarea de procesamiento asincrónico. private async Task ProcesamientoAsincronico() { Task tarea1 = ObtenerInfoAsync("Tarea No. 1", 3); Task tarea2 = ObtenerInfoAsync("Tarea No. 2", 5); string[] resultados = await Task.WhenAll(tarea1, tarea2); // Visualización de resultados después de la ejecución de las // de las dos tareas: foreach (string resultado in resultados) { Console.WriteLine(resultado); } } /// /// Método para ejecución asincrónica. /// /// Nombre de la tarea a ejecutar. /// Duración de la simulación de tarea extendida. /// Estado del thread de ejecución asincrónica. private async Task ObtenerInfoAsync(string nombreTarea, int duracion) { await Task.Delay(TimeSpan.FromSeconds(duracion)); return String.Format("`{0}` se está ejecutando en el ID de thread {1}. ¿Thread en el pool de threads?: {2}", nombreTarea, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); } public static void Main() { new EjecucionParalelaConAwait().Ejecutar(); } } }