Esempio n. 1
0
        public void Execute_runs_func_returns_context_with_elapsed_time()
        {
            TimeSpan funcElapsed           = TimeSpan.MaxValue;
            Func <RetryContext, Task> func = delegate(RetryContext r)
            {
                funcElapsed = r.ElapsedTime;
                return(Task.FromResult(false));
            };

            RetryLoop loop = new RetryLoop(func);

            TimeSpan shouldRetryElapsed = TimeSpan.MaxValue;

            loop.ShouldRetry = delegate(RetryContext r)
            {
                shouldRetryElapsed = r.ElapsedTime;
                return(false);
            };

            TimeSpan succeededElapsed = TimeSpan.MaxValue;

            loop.Succeeded = delegate(RetryContext r)
            {
                succeededElapsed = r.ElapsedTime;
                return(false);
            };

            ElapsedTimerStub timer = new ElapsedTimerStub();

            loop.Timer = timer;

            timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(1.0d));
            timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(2.5d));
            timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(4.0d));
            Task <RetryContext> task = loop.ExecuteAsync();

            Assert.Equal(TaskStatus.RanToCompletion, task.Status);
            Assert.Equal(TimeSpan.FromSeconds(1.5d), funcElapsed);
            RetryContext context = task.Result;

            Assert.Equal(1, context.Iteration);
            Assert.Equal(TimeSpan.FromSeconds(3.0d), succeededElapsed);
            Assert.Equal(TimeSpan.FromSeconds(3.0d), shouldRetryElapsed);
            Assert.Equal(TimeSpan.FromSeconds(3.0d), context.ElapsedTime);
        }
Esempio n. 2
0
        public void Execute_runs_func_returns_context_with_elapsed_time()
        {
            TimeSpan funcElapsed = TimeSpan.MaxValue;
            Func<RetryContext, Task> func = delegate(RetryContext r)
            {
                funcElapsed = r.ElapsedTime;
                return Task.FromResult(false);
            };

            RetryLoop loop = new RetryLoop(func);

            TimeSpan shouldRetryElapsed = TimeSpan.MaxValue;
            loop.ShouldRetry = delegate(RetryContext r)
            {
                shouldRetryElapsed = r.ElapsedTime;
                return false;
            };

            TimeSpan succeededElapsed = TimeSpan.MaxValue;
            loop.Succeeded = delegate(RetryContext r)
            {
                succeededElapsed = r.ElapsedTime;
                return false;
            };

            ElapsedTimerStub timer = new ElapsedTimerStub();
            loop.Timer = timer;

            timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(1.0d));
            timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(2.5d));
            timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(4.0d));
            Task<RetryContext> task = loop.ExecuteAsync();

            Assert.Equal(TaskStatus.RanToCompletion, task.Status);
            Assert.Equal(TimeSpan.FromSeconds(1.5d), funcElapsed);
            RetryContext context = task.Result;
            Assert.Equal(1, context.Iteration);
            Assert.Equal(TimeSpan.FromSeconds(3.0d), succeededElapsed);
            Assert.Equal(TimeSpan.FromSeconds(3.0d), shouldRetryElapsed);
            Assert.Equal(TimeSpan.FromSeconds(3.0d), context.ElapsedTime);
        }