Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.ComponentModel;
- using System.Threading;
- using System.Threading.Tasks;
- namespace Recetas.Multithreading.R0405
- {
- public class ConversionEAPaTPL
- {
- public static void Main()
- {
- Console.WriteLine ();
- var tcs = new TaskCompletionSource<int>();
- var worker = new BackgroundWorker();
- // Ocurre una vez que se invoca el método `RunWorkerAsync`:
- worker.DoWork += (sender, eventArgs) =>
- {
- // Invocación asincrónica de `Tarea`:
- eventArgs.Result = Tarea("Ejecución con worker", 5);
- };
- worker.RunWorkerCompleted += (sender, eventArgs) =>
- {
- // Se comprueba la finalización del thread creado por
- // BackgroundWorker:
- if (eventArgs.Error != null)
- {
- tcs.SetException(eventArgs.Error);
- }
- else if (eventArgs.Cancelled)
- {
- tcs.SetCanceled();
- }
- else
- {
- tcs.SetResult((int)eventArgs.Result);
- }
- };
- // Inicia la ejecución asincrónica del método `Tarea`:
- worker.RunWorkerAsync();
- // Recupera el resultado obtenido por la ejecución asincrónica de `Tarea`:
- int resultado = tcs.Task.Result;
- Console.WriteLine ("Resultado de la operación asincrónica: {0}.\n", resultado);
- }
- // Proceso de ejecución asincrónica:
- public static int Tarea(string nombre, int duracion)
- {
- Console.WriteLine ("La tarea `{0}` se está ejecutando en el ID {1}. " +
- "¿Thread en pool de threads?: {2}.", nombre,
- Thread.CurrentThread.ManagedThreadId,
- Thread.CurrentThread.IsThreadPoolThread);
- // Simulación de ejecución tardía:
- Thread.Sleep (TimeSpan.FromSeconds(duracion));
- return 42 * duracion;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement