Advertisement
Fhernd

SincronismoAsincronismo.cs

Mar 25th, 2016
809
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.42 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Recetas.Multithreading.R0402
  6. {
  7.     public class SincronismoAsincronismo
  8.     {
  9.         public static void Main()
  10.         {
  11.             // Ejecución sincrónica del método OperacionTask:
  12.             OperacionTask("Task desde el Thread de Main");
  13.            
  14.             // Creación de Task asincrónico:
  15.             Task<int> taskAsincronico = CrearTask("Task 1");
  16.             taskAsincronico.Start();
  17.             int resultado = taskAsincronico.Result;
  18.             Console.WriteLine ("El resultado devuelto por Task 1 es: {0}", resultado);
  19.            
  20.             // Creación nuevo Task para ejecución sincrónica:
  21.             Task<int> taskSincronico = CrearTask("Task 2");
  22.             taskSincronico.RunSynchronously();
  23.             resultado = taskSincronico.Result;
  24.             Console.WriteLine ("El resultado devuelto por Task 2 es: {0}", resultado);
  25.            
  26.             // Creación de nueva tarea asincrónica:
  27.             taskAsincronico = CrearTask("Task 3");
  28.             taskAsincronico.Start();
  29.            
  30.             // Mientras que la tarea no se haya completada,
  31.             // mostrar su estado:
  32.             while (!taskAsincronico.IsCompleted)
  33.             {
  34.                 Console.WriteLine (taskAsincronico.Status);
  35.                 Thread.Sleep (TimeSpan.FromSeconds(0.5));
  36.             }
  37.            
  38.             // Muestra los estados finales de la ejecución
  39.             // de la última tarea asincrónica:
  40.             Console.WriteLine ("Estado de Task 3: {0}", taskAsincronico.Status);
  41.             resultado = taskAsincronico.Result;
  42.             Console.WriteLine ("El resultado devuelto por Task 3 es: {0}", resultado);
  43.            
  44.             Console.WriteLine ();
  45.         }
  46.        
  47.         public static Task<int> CrearTask(string nombreTask)
  48.         {
  49.             return new Task<int>( () => OperacionTask(nombreTask));
  50.         }
  51.        
  52.         static int OperacionTask(string nombreTask)
  53.         {
  54.             Console.WriteLine ("\nID {0} se está ejecutando en el ID de Thread {1}. ¿Está en el pool de threads?: {2}",
  55.                 nombreTask,
  56.                 Thread.CurrentThread.ManagedThreadId,
  57.                 Thread.CurrentThread.IsThreadPoolThread);
  58.                
  59.             Thread.Sleep (TimeSpan.FromSeconds(2));
  60.            
  61.             return 42;
  62.         }
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement