Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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<int> 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<int> 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<int> CrearTask(string nombreTask)
- {
- return new Task<int>( () => 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;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement