using System; using System.Threading; using System.Threading.Tasks; namespace Recetas.Multithreading.R0402 { public class SincronismoAsincronismo { public static void Main() { // Ejecución sincrónica del método OperacionTask: OperacionTask("Task desde el Thread de Main"); // Creación de Task asincrónico: Task taskAsincronico = CrearTask("Task 1"); taskAsincronico.Start(); int resultado = taskAsincronico.Result; Console.WriteLine ("El resultado devuelto por Task 1 es: {0}", resultado); // Creación nuevo Task para ejecución sincrónica: Task taskSincronico = CrearTask("Task 2"); taskSincronico.RunSynchronously(); resultado = taskSincronico.Result; Console.WriteLine ("El resultado devuelto por Task 2 es: {0}", resultado); // Creación de nueva tarea asincrónica: taskAsincronico = CrearTask("Task 3"); taskAsincronico.Start(); // Mientras que la tarea no se haya completada, // mostrar su estado: while (!taskAsincronico.IsCompleted) { Console.WriteLine (taskAsincronico.Status); Thread.Sleep (TimeSpan.FromSeconds(0.5)); } // Muestra los estados finales de la ejecución // de la última tarea asincrónica: Console.WriteLine ("Estado de Task 3: {0}", taskAsincronico.Status); resultado = taskAsincronico.Result; Console.WriteLine ("El resultado devuelto por Task 3 es: {0}", resultado); Console.WriteLine (); } public static Task CrearTask(string nombreTask) { return new Task( () => OperacionTask(nombreTask)); } static int OperacionTask(string nombreTask) { Console.WriteLine ("\nID {0} se está ejecutando en el ID de Thread {1}. ¿Está en el pool de threads?: {2}", nombreTask, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); Thread.Sleep (TimeSpan.FromSeconds(2)); return 42; } } }