static void Main(string[] args) { Console.WriteLine("Hello World!"); var random = new Random(); var subject = new SimpleCalculator(random.Next(-20, 100), random.Next(-10, 50)); var sum = new SumObserver(); var multiplication = new MultiplicationObserver(); subject.Attach(multiplication); subject.Attach(sum); subject.Attach(new DivisionObserver()); subject.Attach(new SubtractionObserver()); Console.WriteLine("\nExemplo sorteando os observadores"); for (int i = 0; i < 2; i++) { subject.Operation = (Operation)random.Next(0, 3); subject.Notify(subject); } Console.WriteLine("\nExemplo com todos os observadores"); for (int i = 0; i < 4; i++) { subject.Operation = (Operation)i; subject.Notify(subject); } subject.Detach(sum); subject.Detach(multiplication); Console.WriteLine("\nExemplo após remover os observadores de Soma e Multiplicação"); for (int i = 0; i < 4; i++) { subject.Operation = (Operation)i; subject.Notify(subject); } Console.ReadKey(); }
public void CouldCreateTwoRepositoriesAndBroadcastMessages() { using (var repo = new DataRepository("../SeriesRepositoryTests", 100)) using (var repo2 = new DataRepository("../SeriesRepositoryTests", 100)) { for (int rounds = 0; rounds < 1000; rounds++) { var sw = new Stopwatch(); // this read and write series have the same underlying instance inside the repo // the reead series are just wrapped with .ReadOnly() var observable = repo2.Broadcast <int>("test_CouldCreateTwoRepositoriesAndBroadcastMessages").Result; var observer = repo.Broadcast <int>("test_CouldCreateTwoRepositoriesAndBroadcastMessages").Result; var count = 1000000; sw.Start(); var sum = new SumObserver(count); var unsubscribe = observable.Subscribe(sum); for (int i = 0; i < count; i++) { observer.OnNext(i); } sum.Tcs.Task.Wait(); Console.WriteLine("Sum: " + sum.Tcs.Task.Result); sw.Stop(); Trace.WriteLine($"Elapsed msec: {sw.ElapsedMilliseconds}"); Trace.WriteLine($"Round: {rounds}"); unsubscribe.Dispose(); } } }