public void Assure_subscriber_is_ignored_on_consequent_publishings() { var subscribingObject = new SubscribingObject(); ea.Subscribe<TestMessage>(this, subscribingObject.ProcessMessage); subscribingObject = null; GC.Collect(); ea.PublishMessage(testMessage); }
public void Assure_dead_subscribers_are_removed() { DateTime firstStartTime = DateTime.Now; DateTime firstRunCompleted; DateTime secondStartTime; DateTime secondRunCompleted; ea.Subscribe<TestMessage>(this, msg => {}); ea.PublishMessage<TestMessage>(new TestMessage(this)); firstRunCompleted = DateTime.Now; for (int i = 0; i < 100000; i++) { SubscribingObject so = new SubscribingObject(); ea.Subscribe<TestMessage>(so, so.ProcessMessage); so = null; } GC.Collect(); GC.WaitForFullGCComplete(); // This call is expected to remove dead subscribers ea.PublishMessage(testMessage); secondStartTime = DateTime.Now; ea.PublishMessage(testMessage); secondRunCompleted = DateTime.Now; var timeDifferenceBetweenFirstAndSecondRun = Math.Abs( ((firstRunCompleted - firstStartTime) - (secondRunCompleted - secondStartTime)).TotalMilliseconds); Debug.WriteLine(timeDifferenceBetweenFirstAndSecondRun); timeDifferenceBetweenFirstAndSecondRun.ShouldBeLessThan(50); }
public void Assure_subscription_does_not_keep_it_alive() { var subscribingObject = new SubscribingObject(); WeakReference weakReference = new WeakReference(subscribingObject); ea.Subscribe<TestMessage>(this, subscribingObject.ProcessMessage); subscribingObject = null; GC.Collect(); bool hasBeenDisposed = !weakReference.IsAlive; hasBeenDisposed.ShouldBeTrue(); }