c# - 如何根据异常进行有条件的 WaitAndRetry 或 WaitAndRetryForever?

标签 c# asp.net polly

这是我的尝试:

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);

关于c# - 如何根据异常进行有条件的 WaitAndRetry 或 WaitAndRetryForever?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66747345/

相关文章:

c# - 使用 Polly 从异步函数进行重试

c# - CameraCapture Windows8.1 和 WP 8.1 在 CapturePhotoToStreamAsync 时禁用系统声音

c# - 在特定条目之后选择有序列表中的项目

c# - Polly 后备中的动态委托(delegate)

c# - RowDataBound : Getting value from dataTable ! 无法将类型 'System.DBNull' 的对象转换为类型 'System.String'

asp.net - 如何检测页面上是否有脚本管理器?

c# - Polly 使用不同的 url 重试

c# - 为什么 C# 允许在集合初始值设定项中使用尾随逗号,但不允许在参数中使用?

c# - 将左列添加到 MVC Net Core 元素模板 View 中,该 View 会随着用户向下滚动而消失

c# - 在动态添加的 UserControl 上设置属性