Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步等待任务空引用异常_C#_Asp.net_Asynchronous_Nullreferenceexception_Mscorlib - Fatal编程技术网

C# 异步等待任务空引用异常

C# 异步等待任务空引用异常,c#,asp.net,asynchronous,nullreferenceexception,mscorlib,C#,Asp.net,Asynchronous,Nullreferenceexception,Mscorlib,我正在维护的一个webforms项目上出现了NullReferenceExceptions。问题是,此异常没有stacktrace,因为我的代码中没有任何代码导致此异常。 复制到剪贴板的异常详细信息不提供任何帮助: System.NullReferenceException未处理 消息:mscorlib.dll中发生类型为“System.NullReferenceException”的未处理异常 附加信息:对象引用未设置为对象的实例。 当我查看非用户代码stacktrace时,我看到以下内容(

我正在维护的一个webforms项目上出现了NullReferenceExceptions。问题是,此异常没有stacktrace,因为我的代码中没有任何代码导致此异常。

复制到剪贴板的异常详细信息不提供任何帮助:
System.NullReferenceException未处理
消息:mscorlib.dll中发生类型为“System.NullReferenceException”的未处理异常
附加信息:对象引用未设置为对象的实例。

当我查看非用户代码stacktrace时,我看到以下内容(全部在mscorlib中):

错误是随机且不一致的,通过加载页面或回发。在我添加了
System.Net.Http.HttpClient
用于从其他站点上公开的REST服务提取数据之后,问题就开始了。请注意,HttpClient只包含用于发送/接收数据的异步方法。根据内部stacktrace,我高度怀疑Task/async/wait是罪魁祸首

为了帮助排除故障,请允许我重申,我正在.NET 4.6中编译的WebForms站点中运行此功能(如果您要告诉我我的问题是我需要升级到MVC,请保存您的击键,不要说)。当HttpClient将所有内容作为任务公开时,我通过调用同步调用它们:
Task myResultTask=restClient.GetResultAsync();
MyObject myResult=myResultTask.Result;//无等待


提前谢谢

我刚刚遇到了这个问题,希望以此作为答案

在web.config中,确保具有以下内容:

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

如果不这样做,它似乎只是随机崩溃。我非常喜欢向后兼容,但如果你不选择新的方式,它就会崩溃


(斯蒂芬·克利里在评论中建议)

打电话等待lol@RenéVogt如果我没记错的话,你可以很容易地遇到各种奇怪的问题而不必担心await@JoeyHerrington:您有吗?另外,为什么您首先要使用
HttpClient
?如果需要同步web请求,请使用
WebClient
HttpClient
是专为
async
/
Wait
风格的代码而设计的,
Result
和朋友可以死锁。@Joey Herrington:长期来看,我肯定会选择
4.5
并升级它损坏的东西。短期内,您可以尝试设置
aspnet:UseTaskFriendlySynchronizationContext
(详细信息)。那可能行得通。
<appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />     
</appSettings>