fork download
  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. public static void Main()
  57. {
  58. new EjecucionParalelaConAwait().Ejecutar();
  59. }
  60. }
  61. }
Success #stdin #stdout 0.13s 29464KB
stdin
Standard input is empty
stdout
`Tarea No. 1` se está ejecutando en el ID de thread 5. ¿Thread en el pool de threads?: True
`Tarea No. 2` se está ejecutando en el ID de thread 5. ¿Thread en el pool de threads?: True