Polly

发布时间 2024-01-10 21:15:43作者: 月渊
    private static async Task Main(string[] args)
    {
        var timeoutPolicy = Policy
            .TimeoutAsync(TimeSpan.FromSeconds(5), TimeoutStrategy.Pessimistic);
        var timeoutTotalPolicy = Policy
            .TimeoutAsync(TimeSpan.FromSeconds(20), TimeoutStrategy.Pessimistic);
        var waitAndRetryPolicy = Policy
            .Handle<Exception>()
            .WaitAndRetryAsync(
                2,
                _ => TimeSpan.FromMilliseconds(200));
        var fallbackForAnyException = Policy<string>
            .Handle<Exception>()
            .FallbackAsync(
                _ => Task.FromResult(""),
                _ => Task.CompletedTask);
        var policyWrap = fallbackForAnyException
            .WrapAsync(timeoutTotalPolicy)
            .WrapAsync(waitAndRetryPolicy)
            .WrapAsync(timeoutPolicy);
        var res = await policyWrap.ExecuteAsync(async () =>
        {
            await Task.Delay(10);
            throw new Exception("eee");
        });
    }