在 Null 引用异常中使 MoveNext() 无效

Ips*_*aur 2 c#

我有WebAPI一段代码,其中在使用我的记录器记录的 try 块中编写的代码中存在 Null 引用异常。

但在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;
    }
Run Code Online (Sandbox Code Playgroud)

Ren*_*ogt 8

您有一个async带有多个awaits的方法。编译器将整个方法转换为状态机,而您的方法实际上只调用了这个状态机。

这个状态机类有上面提到的MoveNext()方法,它现在包含你真正想做的所有工作。

要分析您的内容,NullReferenceException您应该检查StackTrace异常的属性而不是TargetSite.


ang*_*son 5

方法就是async/await方法。

这种方法用方法重写为状态机MoveNext。这就是为什么您的堆栈跟踪会将此方法识别为引发该异常的方法。

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

您可以在此处阅读有关此内容的更多信息:Age of Ascent:.NET Core 2.1 中的 Stacktrace 改进

但是,它可能无法修复 TargetSite,而且我认为它无法处理 .NET Framework。