Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace Testing
- {
- public class Program
- {
- private const int Timeout = 2000;
- private static readonly Barrier MyBarier = new Barrier(3, barier => Console.WriteLine("Current phase {0}", barier.CurrentPhaseNumber));
- public static void Main()
- {
- var cts = new CancellationTokenSource();
- var ct = cts.Token;
- var t1 = Task.Factory.StartNew(() => DoWork1(), ct);
- var t2 = Task.Factory.StartNew(() => DoWork2(), ct);
- var t3 = Task.Factory.StartNew(() => DoWork3(), ct);
- Task.WaitAll(new[] {t1, t2, t3}, 10000);
- }
- public static void DoWork1()
- {
- Console.WriteLine("phase 1 of DoWork1");
- MyBarier.SignalAndWait();
- Console.WriteLine("phase 2 of DoWork1");
- try
- {
- if (!MyBarier.SignalAndWait(Timeout))
- {
- throw new OperationCanceledException("Cancelation requested");
- }
- }
- catch (Exception)
- {
- Console.WriteLine("DoWork1 canceled");
- }
- Console.WriteLine("phase 3 of DoWork1");
- }
- public static void DoWork2()
- {
- Console.WriteLine("phase 1 of DoWork2");
- MyBarier.SignalAndWait();
- Console.WriteLine("phase 2 of DoWork2");
- Thread.Sleep(2500);
- try
- {
- MyBarier.SignalAndWait();
- }
- catch (Exception)
- {
- Console.WriteLine("DoWork2 canceled");
- }
- Console.WriteLine("phase 3 of DoWork2");
- }
- public static void DoWork3()
- {
- Console.WriteLine("phase 1 of DoWork3");
- MyBarier.SignalAndWait();
- Console.WriteLine("phase 2 of DoWork3");
- Thread.Sleep(2500);
- try
- {
- MyBarier.SignalAndWait();
- }
- catch (Exception)
- {
- Console.WriteLine("DoWork3 canceled");
- }
- Console.WriteLine("phase 3 of DoWork3");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement