fork download
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Ch05_UsingCSharp5Dot0.R0502
  6. {
  7. /// <summary>
  8. ///
  9. /// </summary>
  10. public class AwaitExpresionLambda
  11. {
  12. /// <summary>
  13. /// Inicio ejecución de la demostración de expresión lambda con operador await.
  14. /// </summary>
  15. public void Ejecutar()
  16. {
  17. Task tarea = ProcesamientoAsincronico();
  18.  
  19. tarea.Wait();
  20. }
  21.  
  22. /// <summary>
  23. /// Procesamiento asincrónico usando una expresión lambda y el operador await.
  24. /// </summary>
  25. /// <returns></returns>
  26. private async static Task ProcesamientoAsincronico()
  27. {
  28. // Definición de expresión lambda con uso de operador await:
  29. Func<string, Task<string>> lambdaAsync = async nombre =>
  30. {
  31. await Task.Delay(TimeSpan.FromSeconds(2));
  32. return String.Format("`{0}` se está ejecutando en el ID de thread {1}. "
  33. + "¿Thread en el pool de threads?: {2}.",
  34. nombre,
  35. Thread.CurrentThread.ManagedThreadId,
  36. Thread.CurrentThread.IsThreadPoolThread);
  37. };
  38.  
  39. string resultado = await lambdaAsync("Expresión lambda asincrónica");
  40.  
  41. Console.WriteLine(resultado);
  42. }
  43.  
  44. public static void Main()
  45. {
  46. new AwaitExpresionLambda().Ejecutar();
  47. }
  48. }
  49. }
Success #stdin #stdout 0.1s 29400KB
stdin
Standard input is empty
stdout
`Expresión lambda asincrónica` se está ejecutando en el ID de thread 5. ¿Thread en el pool de threads?: True.