public void TestSmartPollingBlocking()
        {
            DateTimeOffset threeSecondDelay = DateTimeOffset.Now.AddSeconds(3);

            const int maxDelayMillisec = 500;
            var pollmeister = new BlockingObjectPoll<object>(() => PollCurrentTime(threeSecondDelay), maxDelayMillisec);
            object result = pollmeister.WaitForPayload();
            this.TestContext.WriteLine("Empty poll calls: {0:#,#0}", pollmeister.EmptyPollCallCount);

            Assert.IsNotNull(result);
            int discrepMillisecBetweenHopedAndActual = ((DateTimeOffset)result - threeSecondDelay).Milliseconds;
            Assert.IsTrue(discrepMillisecBetweenHopedAndActual <= maxDelayMillisec);
            Assert.IsTrue(pollmeister.EmptyPollCallCount <= 12);
            Assert.IsTrue(pollmeister.PollCallCountWithPayload == 1);
        }
        public void TestSmartPollingBlocking()
        {
            DateTimeOffset threeSecondDelay = DateTimeOffset.Now.AddSeconds(3);

            const int maxDelayMillisec = 500;
            var       pollmeister      = new BlockingObjectPoll <object>(() => PollCurrentTime(threeSecondDelay), maxDelayMillisec);
            object    result           = pollmeister.WaitForPayload();

            this.TestContext.WriteLine("Empty poll calls: {0:#,#0}", pollmeister.EmptyPollCallCount);

            Assert.IsNotNull(result);
            int discrepMillisecBetweenHopedAndActual = ((DateTimeOffset)result - threeSecondDelay).Milliseconds;

            Assert.IsTrue(discrepMillisecBetweenHopedAndActual <= maxDelayMillisec);
            Assert.IsTrue(pollmeister.EmptyPollCallCount <= 12);
            Assert.IsTrue(pollmeister.PollCallCountWithPayload == 1);
        }
        public void TestSmartPollingCallback()
        {
            DateTimeOffset threeSecondDelay = DateTimeOffset.Now.AddSeconds(3);

            const int maxDelayMillisec = 500;
            DateTimeOffset? message = null;
            BlockingObjectPoll<object> pollmeister;
            using (pollmeister = new BlockingObjectPoll<object>(() => PollCurrentTime(threeSecondDelay), maxDelayMillisec))
            {
                pollmeister.Subscribe(payload => message = payload == null ? (DateTimeOffset?)null : (DateTimeOffset)payload);
                Threading.Sleep(3100);
            }

            this.TestContext.WriteLine("Empty poll calls: {0:#,#0}, Calls with payload: {1:#,#0}", pollmeister.EmptyPollCallCount, pollmeister.PollCallCountWithPayload);

            Assert.IsTrue(message != null, "Message cannot be null.");
            int discrepMillisecBetweenHopedAndActual = (message.Value - threeSecondDelay).Milliseconds;
            Assert.IsTrue(discrepMillisecBetweenHopedAndActual <= maxDelayMillisec + 100, "After-wait delay is too long.");
            Assert.IsTrue(pollmeister.EmptyPollCallCount <= 12, "Number of poll hits is too low.");
            Assert.IsTrue(pollmeister.PollCallCountWithPayload >= 1, "There was no poll hit returning actual payload.");
        }
        public void TestSmartPollingCallback()
        {
            DateTimeOffset threeSecondDelay = DateTimeOffset.Now.AddSeconds(3);

            const int      maxDelayMillisec = 500;
            DateTimeOffset?message          = null;
            BlockingObjectPoll <object> pollmeister;

            using (pollmeister = new BlockingObjectPoll <object>(() => PollCurrentTime(threeSecondDelay), maxDelayMillisec))
            {
                pollmeister.Subscribe(payload => message = payload == null ? (DateTimeOffset?)null : (DateTimeOffset)payload);
                Threading.Sleep(3100);
            }

            this.TestContext.WriteLine("Empty poll calls: {0:#,#0}, Calls with payload: {1:#,#0}", pollmeister.EmptyPollCallCount, pollmeister.PollCallCountWithPayload);

            Assert.IsTrue(message != null, "Message cannot be null.");
            int discrepMillisecBetweenHopedAndActual = (message.Value - threeSecondDelay).Milliseconds;

            Assert.IsTrue(discrepMillisecBetweenHopedAndActual <= maxDelayMillisec + 100, "After-wait delay is too long.");
            Assert.IsTrue(pollmeister.EmptyPollCallCount <= 12, "Number of poll hits is too low.");
            Assert.IsTrue(pollmeister.PollCallCountWithPayload >= 1, "There was no poll hit returning actual payload.");
        }