You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polly重试模式:onRetry块中response是否可能为空的咨询

onRetry块中的response.Result是否可能为空?

你的代码里,onRetry的参数response是DelegateResult<HttpResponseMessage>类型,它本身不会为空,但**response.Result确实有可能为空**,分两种触发重试的场景具体分析:

  • 当重试由HttpRequestException触发时:
    此时response.Exception会持有该异常实例,而response.Result会是null(因为HttpResponseMessage是引用类型,默认值为null)。这种情况下直接访问response.Result或response.Result.StatusCode,必然会抛出NullReferenceException。

  • 当重试由OrResult条件触发时:
    你的OrResult条件明确限制了r != null && !r.IsSuccessStatusCode,所以这种场景下response.Result一定是非空的,访问它的属性不会有问题。

因此你的代码存在空引用风险,修复时可以在访问response.Result前先做非空判断,或者区分异常与结果两种重试场景:

onRetry: (response, delay, retryCount, context) =>
{
    Console.WriteLine(retryCount);
    if (response.Result != null)
    {
        Console.WriteLine(response.Result);
        Console.WriteLine(response.Result.StatusCode);
    }
    else if (response.Exception != null)
    {
        Console.WriteLine($"重试原因:{response.Exception.Message}");
    }
}

内容的提问来源于stack exchange,提问作者user18024637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:25:35