Ejemplo n.º 1
0
            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);
            }
Ejemplo n.º 2
0
            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);
            }
Ejemplo n.º 3
0
            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();
            }