public void Should_not_raise_event_after_having_called_Stop() { ThreadPool.SetMaxThreads(10, 10); const int VeryAggressiveTimerIntervalForMarketDataPublicationInMsec = 1; var marketData = new RawMaterialMarketData("eggs", VeryAggressiveTimerIntervalForMarketDataPublicationInMsec); long counter = 0; marketData.PriceChanged += (o, args) => { lock (this) { if (args.Price > 0m) { Interlocked.Increment(ref counter); } Monitor.PulseAll(this); } }; marketData.Start(); lock (this) { if (counter == 0) { Monitor.Wait(this, 50); } } Check.That(counter).IsStrictlyGreaterThan(0); var counterBeforeStop = Interlocked.Read(ref counter); marketData.Stop(); Thread.Sleep(50); var counterAfterStop = Interlocked.Read(ref counter); Check.That(counterAfterStop).IsEqualTo(counterBeforeStop); }
public void Should_not_raise_event_after_having_called_Stop() { const int VeryAggressiveTimerIntervalForMarketDataPublicationInMsec = 1; var marketData = new RawMaterialMarketData("eggs", VeryAggressiveTimerIntervalForMarketDataPublicationInMsec); long counter = 0; marketData.PriceChanged += (o, args) => counter = Interlocked.Increment(ref counter); marketData.Start(); Thread.Sleep(80); Check.That(counter).IsGreaterThan(1); var counterBeforeStop = Interlocked.Read(ref counter); marketData.Stop(); // ---------- Thread.Sleep(20); var counterAfterStop = Interlocked.Read(ref counter); Check.That(counterAfterStop).IsEqualTo(counterBeforeStop); }