fork download
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.Multithreading.Cap01.R0108
  5. {
  6. // Clase utilitaria como contenedora de datos
  7. // para un método método ejecutado en un thread:
  8. public class UtilitarioThread
  9. {
  10. private readonly int _iteraciones;
  11.  
  12. public UtilitarioThread (int iteraciones)
  13. {
  14. _iteraciones = iteraciones;
  15. }
  16.  
  17. // Imprime los números desde el 1 hasta
  18. // el número de iteraciones:
  19. public void ContarNumeros()
  20. {
  21. for (int i = 1; i <= _iteraciones; ++i)
  22. {
  23. Thread.Sleep (TimeSpan.FromSeconds(0.5));
  24. Console.WriteLine ("El thread `{0}` imprime {1}",
  25. Thread.CurrentThread.Name,
  26. i.ToString()
  27. );
  28. }
  29. }
  30. }
  31.  
  32. public sealed class ParametrosThread
  33. {
  34. // Método static para contar números según
  35. // el argumento pasado al inicio de la
  36. // ejecución de un thread:
  37. private static void Contar (object iteraciones)
  38. {
  39. ContarNumeros((int)iteraciones);
  40. }
  41.  
  42. // Imprime los números desde el 1 hasta
  43. // el número de iteraciones:
  44. private static void ContarNumeros(int iteraciones)
  45. {
  46. for (int i = 1; i <= iteraciones; ++i)
  47. {
  48. Thread.Sleep (TimeSpan.FromSeconds(0.5));
  49. Console.WriteLine ("El thread `{0}` imprime {1}",
  50. Thread.CurrentThread.Name,
  51. i.ToString()
  52. );
  53. }
  54. }
  55.  
  56. // Imprime un número en la salida estándar:
  57. private static void ImprimirNumero(int numero)
  58. {
  59. Console.WriteLine (numero.ToString());
  60. }
  61.  
  62. public static void Main()
  63. {
  64. Console.Title = "Pasar Parámetros a un Thread";
  65. Console.WriteLine ();
  66.  
  67. // Creación de instancia de la clase UtilitarioThread:
  68. UtilitarioThread ut = new UtilitarioThread(10);
  69. Console.WriteLine ("=== Uso de Thread.Start() ===");
  70. Thread t1 = new Thread (ut.ContarNumeros);
  71. t1.Name = "Thread No. 1";
  72. t1.Start();
  73. t1.Join ();
  74.  
  75. Console.WriteLine ("\n=== Uso de Thread.Start(Object) ===");
  76. Thread t2 = new Thread (new ParameterizedThreadStart(Contar));
  77. t2.Name = "Thread No. 2";
  78. t2.Start (8);
  79. t2.Join();
  80.  
  81. Console.WriteLine ("\n=== Uso de Expresión Lambda (1)===");
  82. Thread t3 = new Thread (() => ContarNumeros(12));
  83. t3.Name = "Thread No. 3";
  84. t3.Start();
  85. t3.Join();
  86.  
  87. Console.WriteLine ("\n=== Uso de Expresión Lambda (2)===");
  88. int numero = 11;
  89. Thread t4 = new Thread(() => ImprimirNumero(numero));
  90. numero = 13;
  91. Thread t5 = new Thread(() => ImprimirNumero(numero));
  92. t4.Start();
  93. t5.Start();
  94. }
  95. }
  96. }
Success #stdin #stdout 0.03s 36048KB
stdin
Standard input is empty
stdout
=== Uso de Thread.Start() ===
El thread `Thread No. 1` imprime 1
El thread `Thread No. 1` imprime 2
El thread `Thread No. 1` imprime 3
El thread `Thread No. 1` imprime 4
El thread `Thread No. 1` imprime 5
El thread `Thread No. 1` imprime 6
El thread `Thread No. 1` imprime 7
El thread `Thread No. 1` imprime 8
El thread `Thread No. 1` imprime 9
El thread `Thread No. 1` imprime 10

=== Uso de Thread.Start(Object) ===
El thread `Thread No. 2` imprime 1
El thread `Thread No. 2` imprime 2
El thread `Thread No. 2` imprime 3
El thread `Thread No. 2` imprime 4
El thread `Thread No. 2` imprime 5
El thread `Thread No. 2` imprime 6
El thread `Thread No. 2` imprime 7
El thread `Thread No. 2` imprime 8

=== Uso de Expresión Lambda (1)===
El thread `Thread No. 3` imprime 1
El thread `Thread No. 3` imprime 2
El thread `Thread No. 3` imprime 3
El thread `Thread No. 3` imprime 4
El thread `Thread No. 3` imprime 5
El thread `Thread No. 3` imprime 6
El thread `Thread No. 3` imprime 7
El thread `Thread No. 3` imprime 8
El thread `Thread No. 3` imprime 9
El thread `Thread No. 3` imprime 10
El thread `Thread No. 3` imprime 11
El thread `Thread No. 3` imprime 12

=== Uso de Expresión Lambda (2)===
13
13