using System;
using System.Threading;
using System.Threading.Tasks;
namespace Recetas.Multithreading.R0401
{
public class TareasAsincronicas
{
public static void Main()
{
Console.WriteLine ();
// Creación de dos objetos Thread:
Task tarea1 = new Task( () => TareaAsincronica("Tarea 1"));
Task tarea2 = new Task( () => TareaAsincronica("Tarea 2"));
// Inicio ejecución de las dos tareas recién creadas:
tarea2.Start();
tarea1.Start();
// Uso del método static Run para la ejecución otra tarea:
Task.Run( () => TareaAsincronica("Tarea 3"));
// Uso de StartNew de Factory para crear dos tareas más:
Task.Factory.StartNew( () => TareaAsincronica("Tarea 4"));
Task.Factory.StartNew( () => TareaAsincronica("Tarea 5"), TaskCreationOptions.LongRunning);
// Retardo de ejecución de Main de un segundo:
Thread.Sleep (TimeSpan.FromSeconds(1));
Console.WriteLine ();
}
public static void TareaAsincronica(string nombreTarea)
{
Console.WriteLine ("La tarea `{0}` se ejecuta en el thread con ID {1} " +
"¿Es un thread del pool de threads?: {2}",
nombreTarea, Thread.CurrentThread.ManagedThreadId,
Thread.CurrentThread.IsThreadPoolThread);
}
}
}