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();
}
}
}