Advertisement
Fhernd

ConversionEAPaTPL.cs

Jun 20th, 2016
2,485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.25 KB | None | 0 0
  1. using System;
  2. using System.ComponentModel;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5.  
  6. namespace Recetas.Multithreading.R0405
  7. {
  8.     public class ConversionEAPaTPL
  9.     {
  10.         public static void Main()
  11.         {
  12.             Console.WriteLine ();
  13.            
  14.             var tcs = new TaskCompletionSource<int>();
  15.            
  16.             var worker = new BackgroundWorker();
  17.            
  18.             // Ocurre una vez que se invoca el método `RunWorkerAsync`:
  19.             worker.DoWork += (sender, eventArgs) =>
  20.             {
  21.                 // Invocación asincrónica de `Tarea`:
  22.                 eventArgs.Result = Tarea("Ejecución con worker", 5);
  23.             };
  24.            
  25.             worker.RunWorkerCompleted += (sender, eventArgs) =>
  26.             {
  27.                 // Se comprueba la finalización del thread creado por
  28.                 // BackgroundWorker:
  29.                 if (eventArgs.Error != null)
  30.                 {
  31.                     tcs.SetException(eventArgs.Error);
  32.                 }
  33.                 else if (eventArgs.Cancelled)
  34.                 {
  35.                     tcs.SetCanceled();
  36.                 }
  37.                 else
  38.                 {
  39.                     tcs.SetResult((int)eventArgs.Result);
  40.                 }
  41.             };
  42.            
  43.             // Inicia la ejecución asincrónica del método `Tarea`:
  44.             worker.RunWorkerAsync();
  45.            
  46.             // Recupera el resultado obtenido por la ejecución asincrónica de `Tarea`:
  47.             int resultado = tcs.Task.Result;
  48.            
  49.             Console.WriteLine ("Resultado de la operación asincrónica: {0}.\n", resultado);
  50.         }
  51.        
  52.         // Proceso de ejecución asincrónica:
  53.         public static int Tarea(string nombre, int duracion)
  54.         {
  55.             Console.WriteLine ("La tarea `{0}` se está ejecutando en el ID {1}. " +
  56.                 "¿Thread en pool de threads?: {2}.", nombre,
  57.                 Thread.CurrentThread.ManagedThreadId,
  58.                 Thread.CurrentThread.IsThreadPoolThread);
  59.                
  60.             // Simulación de ejecución tardía:
  61.             Thread.Sleep (TimeSpan.FromSeconds(duracion));
  62.            
  63.             return 42 * duracion;
  64.         }
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement