Advertisement
Fhernd

EjecucionParalelaConAwait.cs

Jul 3rd, 2016
1,115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.00 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Ch05_UsingCSharp5Dot0.R0504
  6. {
  7.     /// <summary>
  8.     /// Clase demostración para la ejecución de tareas en paralelo.
  9.     /// </summary>
  10.     public class EjecucionParalelaConAwait
  11.     {
  12.         /// <summary>
  13.         /// Inicia la ejecución de las tareas.
  14.         /// </summary>
  15.         public void Ejecutar()
  16.         {
  17.             Task tarea = ProcesamientoAsincronico();
  18.             tarea.Wait();
  19.         }
  20.  
  21.         /// <summary>
  22.         /// Configura la ejecución de tareas para procesamiento asincrónico.
  23.         /// </summary>
  24.         /// <returns>Tarea de procesamiento asincrónico.</returns>
  25.         private async Task ProcesamientoAsincronico()
  26.         {
  27.             Task<string> tarea1 = ObtenerInfoAsync("Tarea No. 1", 3);
  28.             Task<string> tarea2 = ObtenerInfoAsync("Tarea No. 2", 5);
  29.  
  30.             string[] resultados = await Task.WhenAll(tarea1, tarea2);
  31.  
  32.             // Visualización de resultados después de la ejecución de las
  33.             // de las dos tareas:
  34.             foreach (string resultado in resultados)
  35.             {
  36.                 Console.WriteLine(resultado);
  37.             }
  38.         }
  39.  
  40.         /// <summary>
  41.         /// Método para ejecución asincrónica.
  42.         /// </summary>
  43.         /// <param name="nombreTarea">Nombre de la tarea a ejecutar.</param>
  44.         /// <param name="duracion">Duración de la simulación de tarea extendida.</param>
  45.         /// <returns>Estado del thread de ejecución asincrónica.</returns>
  46.         private async Task<string> ObtenerInfoAsync(string nombreTarea, int duracion)
  47.         {
  48.             await Task.Delay(TimeSpan.FromSeconds(duracion));
  49.  
  50.             return String.Format("`{0}` se está ejecutando en el ID de thread {1}. ¿Thread en el pool de threads?: {2}",
  51.                 nombreTarea,
  52.                 Thread.CurrentThread.ManagedThreadId,
  53.                 Thread.CurrentThread.IsThreadPoolThread);
  54.         }
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement