如何改进此代码,以便重试适用于默认情况下需要重试的所有异常
public static readonly AsyncPolicy RetryPolicy = Policy
.Handle<Exception>()
.RetryAsync(3);
SendAsync
操作会抛出以下异常:
ArgumentNullException
当请求是 null
InvalidOperationException
当请求消息已由 HttpClient 实例发送时
HttpRequestException
当请求由于网络连接、DNS 故障、服务器证书验证或超时等根本问题而失败时
TaskCanceledException
当请求因超时而失败时(仅限 .NET Core 和 .NET 5 及更高版本)
OperationCanceledException
取消令牌被取消时(此异常存储到返回的任务中)
TaskCanceledException
是源自
OperationCanceledException
。因此,如果您想在这两种情况下重试,那么只处理后一种就足够了。
public static readonly AsyncPolicy RetryPolicy = Policy
.Handle<HttpRequestException>()
.Or<OperationCanceledException>()
.RetryAsync(3);
状态代码SendAsync
因异常而失败的情况。但也可能存在
SendAsync
没有失败但发送的请求没有被处理的情况。
SendAsync
返回一个
HttpResponseMessage
对象,其
StatusCode
属性可能指示可重试的问题。典型的可重试状态代码:
的备注,那么您可以看到它将注册一个重试策略,该策略会在以下条件之一触发:
HttpRequestException
)
幂等操作