コード例 #1
0
        public void Should_call_onFallback_passing_result_triggering_fallback()
        {
            bool fallbackActionExecuted = false;
            Func<CancellationToken, Task<ResultClass>> fallbackAction = ct => { fallbackActionExecuted = true; return Task.FromResult(new ResultClass(ResultPrimitive.Substitute)); };

            ResultClass resultPassedToOnFallback = null;
            Func<DelegateResult<ResultClass>, Task> onFallbackAsync = r => { resultPassedToOnFallback = r.Result; return TaskHelper.EmptyTask; };

            FallbackPolicy<ResultClass> fallbackPolicy = Policy
                .HandleResult<ResultClass>(r => r.ResultCode == ResultPrimitive.Fault)
                .FallbackAsync(fallbackAction, onFallbackAsync);

            ResultClass resultFromDelegate = new ResultClass(ResultPrimitive.Fault);
            fallbackPolicy.ExecuteAsync(() => { return Task.FromResult(resultFromDelegate); });

            fallbackActionExecuted.Should().BeTrue();
            resultPassedToOnFallback.Should().NotBeNull();
            resultPassedToOnFallback.Should().Be(resultFromDelegate);
        }
コード例 #2
0
        public void Should_call_onFallback_passing_result_triggering_fallback()
        {
            bool fallbackActionExecuted = false;
            Func<ResultClass> fallbackAction = () => { fallbackActionExecuted = true; return new ResultClass(ResultPrimitive.Substitute); };

            ResultClass resultPassedToOnFallback = null;
            Action<DelegateResult<ResultClass>> onFallback = r => { resultPassedToOnFallback = r.Result; };

            FallbackPolicy<ResultClass> fallbackPolicy = Policy
                .HandleResult<ResultClass>(r => r.ResultCode == ResultPrimitive.Fault)
                .Fallback(fallbackAction, onFallback);

            ResultClass resultFromDelegate = new ResultClass(ResultPrimitive.Fault);
            fallbackPolicy.Execute(() => { return resultFromDelegate; });

            fallbackActionExecuted.Should().BeTrue();
            resultPassedToOnFallback.Should().NotBeNull();
            resultPassedToOnFallback.Should().Be(resultFromDelegate);
        }