提问者:小点点

如何根据异常创建条件WaitAndRetry或WaitAndRetryForever?


以下是我的尝试:


        private Policy retryPolicy { get; } = Policy
            .Handle<IOException>()
            .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
        private Policy bigFilePolicy { get; } = Policy
            .Handle<UnauthorizedAccessException>()
            .WaitAndRetryForeverAsync(retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));

        retryPolicy.ExecuteAsync(() => bigFilePolicy.ExecuteAsync(command));

我正在尝试为自动文件上传系统制定重试策略。当文件太大时,要在文件夹中删除需要一些时间,而当它加载时,我的程序会给出一个未经授权的访问异常,在这种情况下,我会考虑为大文件允许“waitandretryforever”。否则,如果它获得其他异常,则不应永远重试。


共1个答案

匿名用户

要将策略混合在一起,需要调用policy.wrap/policy.wrapAsync。例如,您可以执行以下操作:

var exponentialBackoffPolicy = Policy.WrapAsync(retryPolicy, bigFilePolicy);

甚至:

var exponentialBackoffPolicy = retryPolicy.WrapAsync(bigFilePolicy);