Null引用异常中的Void MoveNext()

时间:2018-06-12 11:12:29

标签: c#

我有一个many=True,其中包含以下代码,其中在try块中编写的代码中存在Null引用异常,该代码将使用我的记录器进行记录。

但是在WebAPI的{​​{1}}中,我正在接收 Void MoveNext(),而不是编写此代码的方法名称。

同样的原因可能是什么?

TargetSite

2 个答案:

答案 0 :(得分:2)

您的async方法包含多个await个。编译器将整个方法转换为state machine,并且您的方法最终实际上只调用此状态机。

此状态机类具有上述MoveNext()方法,该方法现在包含您实际想要执行的所有工作。

要分析您的NullReferenceException,您应该检查例外的StackTrace属性,而不是TargetSite

答案 1 :(得分:1)

该方法是t := time.Now() t = t.Add(-3600 * time.Second) 方法。

使用time.Duration方法将这种方法重写为状态机。这就是为什么你的堆栈跟踪会将此方法识别为抛出该异常的方法。

.NET Core 2.0或2.1具有内置或额外的nuget包,可修复此类堆栈跟踪,以提及实际方法而非生成的方法。

您可以在此处详细了解:Age of Ascent: Stacktrace improvements in .NET Core 2.1

然而,它可能无法修复TargetSite,我认为它不会处理.NET Framework。