Advertisement
Guest User

Untitled

a guest
Jul 25th, 2011
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. namespace Testing
  2. {
  3. public class Program
  4. {
  5. private const int Timeout = 2000;
  6. private static readonly Barrier MyBarier = new Barrier(3, barier => Console.WriteLine("Current phase {0}", barier.CurrentPhaseNumber));
  7.  
  8. public static void Main()
  9. {
  10. var cts = new CancellationTokenSource();
  11. var ct = cts.Token;
  12.  
  13. var t1 = Task.Factory.StartNew(() => DoWork1(), ct);
  14. var t2 = Task.Factory.StartNew(() => DoWork2(), ct);
  15. var t3 = Task.Factory.StartNew(() => DoWork3(), ct);
  16.  
  17. Task.WaitAll(new[] {t1, t2, t3}, 10000);
  18.  
  19. }
  20.  
  21. public static void DoWork1()
  22. {
  23. Console.WriteLine("phase 1 of DoWork1");
  24. MyBarier.SignalAndWait();
  25.  
  26. Console.WriteLine("phase 2 of DoWork1");
  27. try
  28. {
  29. if (!MyBarier.SignalAndWait(Timeout))
  30. {
  31. throw new OperationCanceledException("Cancelation requested");
  32. }
  33. }
  34. catch (Exception)
  35. {
  36. Console.WriteLine("DoWork1 canceled");
  37. }
  38. Console.WriteLine("phase 3 of DoWork1");
  39. }
  40.  
  41. public static void DoWork2()
  42. {
  43. Console.WriteLine("phase 1 of DoWork2");
  44. MyBarier.SignalAndWait();
  45.  
  46. Console.WriteLine("phase 2 of DoWork2");
  47. Thread.Sleep(2500);
  48. try
  49. {
  50. MyBarier.SignalAndWait();
  51. }
  52. catch (Exception)
  53. {
  54. Console.WriteLine("DoWork2 canceled");
  55. }
  56.  
  57. Console.WriteLine("phase 3 of DoWork2");
  58. }
  59.  
  60. public static void DoWork3()
  61. {
  62. Console.WriteLine("phase 1 of DoWork3");
  63. MyBarier.SignalAndWait();
  64.  
  65. Console.WriteLine("phase 2 of DoWork3");
  66. Thread.Sleep(2500);
  67.  
  68. try
  69. {
  70. MyBarier.SignalAndWait();
  71. }
  72. catch (Exception)
  73. {
  74. Console.WriteLine("DoWork3 canceled");
  75. }
  76.  
  77. Console.WriteLine("phase 3 of DoWork3");
  78. }
  79. }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement