代码之家  ›  专栏  ›  技术社区  ›  Ipsit Gaur

空引用异常中的void moveNext()

c#
  •  0
  • Ipsit Gaur  · 技术社区  · 7 年前

    我有一个 WebAPI 它具有以下代码段,其中在try块中写入的代码中存在空引用异常,该代码段将使用我的日志记录。

    但在 TargetSite Exception 登录,我收到 无效moveNext() 而不是编写此代码的方法名。

    为什么会这样??

    public async Task<ResponseStatus> ProcessRCSCNotification(IList<RecurringSubscriptionModelV2> recurringSubscriptionList, string appCD)
        {
                foreach (var model in modelList)
    {
      // Some code
      try
      {
         // Exception occurs here
      }
      catch (Exception ex)
      {
        // Logger is logging exception here
      }
    }
            return null;
        }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   René Vogt    7 年前

    你有一个 async 几种方法 await 编译器将整个方法转换为 state machine 你的方法最终只调用了这个状态机。

    这个状态机类有 MoveNext() 方法,该方法现在包含您实际要做的所有工作。

    分析你的 NullReferenceException 你应该检查一下 StackTrace 异常的属性 TargetSite .

        2
  •  1
  •   Lasse V. Karlsen    7 年前

    方法是 async/await 方法。

    这种方法被重写为一个状态机 MoveNext 方法。这就是为什么堆栈跟踪将此方法标识为引发该异常的方法。

    .NET Core 2.0或2.1具有内置或额外的Nuget包,该包将修复这样的堆栈跟踪,以提及实际的方法而不是生成的方法。

    您可以在这里阅读更多关于此的信息: Age of Ascent: Stacktrace improvements in .NET Core 2.1 .

    但它可能无法修复targetsite,而且我认为它无法处理.net framework。