我有一个many=True
,其中包含以下代码,其中在try块中编写的代码中存在Null引用异常,该代码将使用我的记录器进行记录。
但是在WebAPI
的{{1}}中,我正在接收 Void MoveNext(),而不是编写此代码的方法名称。
同样的原因可能是什么?
TargetSite
答案 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。