fork download
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Recetas.Multithreading.R0402
  6. {
  7. public class PoolThreadsVsMainThread
  8. {
  9. public static void Main()
  10. {
  11. Console.WriteLine ("\nAplicación consola ejecutándose sobre el ID thread: {0}",
  12. Thread.CurrentThread.ManagedThreadId);
  13.  
  14. var taskAsincronico = Task.Run ( () =>
  15. {
  16. Console.WriteLine ("ID Task {0} (asincrónico) ejecutándose sobre el ID de Thread: {1}",
  17. Task.CurrentId,
  18. Thread.CurrentThread.ManagedThreadId);
  19.  
  20. long suma = 0;
  21. // Cálculo de la suma entre 1 y 1000000:
  22. for ( int i = 1; i <= 1000000; ++i)
  23. {
  24. suma += i;
  25. }
  26.  
  27. return suma;
  28. }
  29. );
  30.  
  31. var taskSincronico = new Task<long> ( () =>
  32. {
  33. Console.WriteLine ("ID Task {0} (sincrónico) ejecutándose sobre el ID de Thread: {1}",
  34. Task.CurrentId,
  35. Thread.CurrentThread.ManagedThreadId);
  36.  
  37. long suma = 0;
  38. // Cálculo de la suma entre 1 y 1000000:
  39. for ( int i = 1; i <= 1000000; ++i)
  40. {
  41. suma += i;
  42. }
  43.  
  44. return suma;
  45. }
  46. );
  47.  
  48. // Inicio de ejecución Task sincrónico:
  49. taskSincronico.RunSynchronously();
  50. Console.WriteLine ();
  51.  
  52. // Visualización de resultados:
  53. Console.WriteLine ("ID Task {0} retornó: {1:N0}", taskSincronico.Id, taskSincronico.Result);
  54. Console.WriteLine ("ID Task {0} retornó: {1:N0}\n", taskAsincronico.Id, taskAsincronico.Result);
  55. }
  56. }
  57. }
Success #stdin #stdout 0.06s 27224KB
stdin
Standard input is empty
stdout
Aplicación consola ejecutándose sobre el ID thread: 1
ID Task 1 (sincrónico) ejecutándose sobre el ID de Thread: 1
ID Task 2 (asincrónico) ejecutándose sobre el ID de Thread: 4

ID Task 1 retornó: 500,000,500,000
ID Task 2 retornó: 500,000,500,000