如何根据异常进行有条件的 WaitAndRetry 或 WaitAndRetryForever?
How to make conditional WaitAndRetry or WaitAndRetryForever depending on the exception?
这是我的尝试:
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
用于大文件。否则,如果它得到其他异常,它不应该永远重试。
要将策略混合在一起,您需要调用 Policy.Wrap
/Policy.WrapAsync
。例如,您可以这样做:
var exponentialBackoffPolicy = Policy.WrapAsync(retryPolicy, bigFilePolicy);
甚至:
var exponentialBackoffPolicy = retryPolicy.WrapAsync(bigFilePolicy);
这是我的尝试:
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
用于大文件。否则,如果它得到其他异常,它不应该永远重试。
要将策略混合在一起,您需要调用 Policy.Wrap
/Policy.WrapAsync
。例如,您可以这样做:
var exponentialBackoffPolicy = Policy.WrapAsync(retryPolicy, bigFilePolicy);
甚至:
var exponentialBackoffPolicy = retryPolicy.WrapAsync(bigFilePolicy);