async await Task null引用异常

时间:2016-08-18 15:17:04

标签: c# asp.net asynchronous nullreferenceexception mscorlib

我正在维护的webforms项目上获得NullReferenceExceptions。问题是这个异常没有堆栈跟踪,因为我的代码都没有导致异常。 NullReferenceException was unhandled

复制到剪贴板的异常详细信息提供零帮助:
System.NullReferenceException was unhandled Message: An unhandled exception of type 'System.NullReferenceException' occurred in mscorlib.dll Additional information: Object reference not set to an instance of an object.

当我查看非用户代码堆栈跟踪时,我看到以下内容(全部在mscorlib中): Stack Trace

错误通过加载页面或回发随机且不一致地发生。在我添加System.Net.Http.HttpClient以从其他站点上公开的REST服务中提取数据后,问题就开始了。请注意,HttpClient仅包含用于发送/接收数据的异步方法。基于内部堆栈跟踪,我高度怀疑任务<> / async / await作为罪魁祸首。

为了帮助进行故障排除,请允许我重申我在.NET 4.6中编译的WebForms站点中运行它(如果您要告诉我我的问题是我需要升级到MVC,请保存您的按键并且不要说它。虽然HttpClient将所有内容公开为Task<>,但我通过调用来同步调用它们:
Task<MyObject> myResultTask = restClient.GetResultAsync(); MyObject myResult = myResultTask.Result; // no await

提前致谢!

1 个答案:

答案 0 :(得分:3)

我刚刚遇到这个问题,并希望将此作为答案。

在您的web.config中,请确保您拥有以下内容:

  <system.Web>
      <httpRuntime targetFramework="4.5" />
  </system.Web>

<appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />     
</appSettings>

在此处查看更多信息:

https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

如果你不这样做,它似乎只会随机崩溃。我是后向兼容性的忠实粉丝,但如果你不选择以新的方式崩溃,我就不会崩溃。

(Stephen Cleary的评论建议)