请让我知道在下面的代码中是否有可能“响应”变为空,如果我试图在response.result块中获得onRetry和response.statuscode值,就会导致错误。
下面的示例代码
AsyncRetryPolicy<HttpResponseMessage> retryPolicyPost = Policy
.Handle<HttpRequestException>()
.OrResult<HttpResponseMessage>(r => r != null && (!r.IsSuccessStatusCode))
.WaitAndRetryAsync(3, times => TimeSpan.FromMilliseconds(times * 30000),
onRetry: (response, delay, retryCount, context) =>
{
Console.WriteLine(retryCount);
Console.WriteLine(response.Result);
Console.WriteLine(response.Result.StatusCode);
});我很感激你的回应。
发布于 2022-11-30 19:24:19
在下面的代码中,“响应”是否可能变为空?
您的response参数的类型是DelegateResult<HttpResponseMessage>,不能在onRetry委托中是null。
但是response.Result 可以为空!DelegateResult定义了两个属性:互斥:Exception,Result。
因此,如果因为抛出HttpRequestException而触发重试逻辑,那么response.Result将是null,但result.Exception将是HttpRequestException。
如果由于HttpResponseMessage的StatusCode与200不同而触发重试逻辑,那么response.Result将是HttpResponseMessage,但result.Exception将是null。
这段代码容易出错,它可能会抛出NRE:
Console.WriteLine(response.Result.StatusCode);要解决这个问题,您可以执行以下操作:
var statusCode = response.Result?.StatusCode ?? ((HttpRequestException)response.Exception).StatusCode;
Console.WriteLine(statusCode);请注意,StatusCode带HttpStatusCode?返回。
https://stackoverflow.com/questions/74631982
复制相似问题