首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过polly重试模式

通过polly重试模式
EN

Stack Overflow用户
提问于 2022-11-30 17:39:39
回答 1查看 39关注 0票数 1

请让我知道在下面的代码中是否有可能“响应”变为空,如果我试图在response.result块中获得onRetry和response.statuscode值,就会导致错误。

下面的示例代码

代码语言:javascript
复制
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);
        });

我很感激你的回应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-30 19:24:19

在下面的代码中,“响应”是否可能变为空?

您的response参数的类型是DelegateResult<HttpResponseMessage>不能在onRetry委托中null

但是response.Result 可以为空!DelegateResult定义了两个属性:互斥ExceptionResult

因此,如果因为抛出HttpRequestException而触发重试逻辑,那么response.Result将是null,但result.Exception将是HttpRequestException

如果由于HttpResponseMessageStatusCode与200不同而触发重试逻辑,那么response.Result将是HttpResponseMessage,但result.Exception将是null

这段代码容易出错,它可能会抛出NRE:

代码语言:javascript
复制
Console.WriteLine(response.Result.StatusCode);

要解决这个问题,您可以执行以下操作:

代码语言:javascript
复制
var statusCode = response.Result?.StatusCode ?? ((HttpRequestException)response.Exception).StatusCode;
Console.WriteLine(statusCode);

请注意,StatusCodeHttpStatusCode?返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74631982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档