Ejemplo n.º 1
0
        private static void CheckCallsAllHAndlersEvenIfSomeFail <T, TEventArgs>(UpdatableLazy <T> lazyInstance, Action <UpdatableLazy <T>, EventHandler <TEventArgs> > addEventAction)
        {
            var resetEvents = InitWaitHandles(3);

            addEventAction(lazyInstance, (o, e) => resetEvents[0].Set());
            addEventAction(lazyInstance, (o, e) =>
            {
                try
                {
                    throw new Exception();
                }
                finally
                {
                    resetEvents[1].Set();
                }
            });

            addEventAction(lazyInstance, (o, e) =>
            {
                Task.Delay(HandlerDelay);
                resetEvents[2].Set();
            });

            Assert.DoesNotThrow(() => { var tmp = lazyInstance.Value; });
            WaitHandle.WaitAll(resetEvents, WaitHandleDelay);
            Assert.IsTrue(resetEvents.All(resetEvent => resetEvent.WaitOne(0)));
        }
Ejemplo n.º 2
0
        public async Task Should_WaitForValueAsync()
        {
            var lazy = new UpdatableLazy <string>(() =>
            {
                Task.Delay(ShortDelay).Wait();
                return(TestValue);
            });

            Assert.AreEqual(TestValue, await lazy.GetValueAsync());
        }
Ejemplo n.º 3
0
        public void Should_WaitForValue()
        {
            var lazy = new UpdatableLazy <string>(() =>
            {
                Task.Delay(HandlerDelay).Wait();
                return(TestValue);
            });

            Assert.AreEqual(TestValue, lazy.Value);
        }
Ejemplo n.º 4
0
        public void Should_UpdateValue()
        {
            var val  = TestValue;
            var lazy = new UpdatableLazy <string>(() => val);

            Assert.AreEqual(val, lazy.Value);

            val = "Changed";
            lazy.UpdateOrWait();
            Assert.AreEqual(val, lazy.Value);
        }
Ejemplo n.º 5
0
        public void ShouldNot_RetryIfMaxRetriesIsZero()
        {
            var counter = 0;
            var lazy    = new UpdatableLazy <string>(() =>
            {
                counter++;
                throw new Exception();
                return(string.Empty);
            }, 0);

            lazy.UpdateOrWait();
            Assert.AreEqual(1, counter);
        }
Ejemplo n.º 6
0
        public void Should_Retry()
        {
            var counter = 0;
            var lazy    = new UpdatableLazy <string>(() =>
            {
                if (counter++ < DefaultMaxRetries - 1)
                {
                    throw new Exception();
                }

                return(TestValue);
            }, DefaultMaxRetries);

            Assert.AreEqual(TestValue, lazy.Value);
            Assert.AreEqual(DefaultMaxRetries, counter);
        }
Ejemplo n.º 7
0
        public async Task Should_UpdateValueAsync()
        {
            var val  = "Val";
            var lazy = new UpdatableLazy <string>(() =>
            {
                Task.Delay(ShortDelay).Wait();
                return(val);
            });

            Assert.AreEqual(val, lazy.Value);

            val = "Changed";
            await lazy.UpdateOrWaitAsync();

            Assert.AreEqual(val, lazy.Value);
        }
Ejemplo n.º 8
0
        public async Task Should_RetryAsync()
        {
            var counter = 0;
            var lazy    = new UpdatableLazy <string>(() =>
            {
                if (counter++ < DefaultMaxRetries - 1)
                {
                    throw new Exception();
                }

                return(TestValue);
            }, DefaultMaxRetries);

            Assert.AreEqual(TestValue, await lazy.GetValueAsync());
            Assert.AreEqual(DefaultMaxRetries, counter);
        }