C# 方法错误';不能等待';System.Threading.Tasks.Task';来自等待和异步属性

C# 方法错误';不能等待';System.Threading.Tasks.Task';来自等待和异步属性,c#,.net,multithreading,asynchronous,C#,.net,Multithreading,Asynchronous,我已经为.NET Framework 4、Silverlight 4和5以及Windows Phone 7.5和8安装了NuGet软件包Async Version 1.0.16 我正在使用Microsoft.NET 4.0,由于Web主机包限制,我无法升级。(可悲!) 我的测试代码:(我正在执行Linq到SQL查询,以代替Thread.Sleep) 谈到错误,但它不是真正的答案,因为我没有使用VB,我已经在做解决方案描述的事情 [编辑] 我得到一个警告: Warning 4 The pri

我已经为.NET Framework 4、Silverlight 4和5以及Windows Phone 7.5和8安装了NuGet软件包Async

Version 1.0.16
我正在使用Microsoft.NET 4.0,由于Web主机包限制,我无法升级。(可悲!)

我的测试代码:(我正在执行Linq到SQL查询,以代替Thread.Sleep)

谈到错误,但它不是真正的答案,因为我没有使用VB,我已经在做解决方案描述的事情

[编辑] 我得到一个警告:

Warning 4   The primary reference "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the framework assembly "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0". To resolve this problem, either remove the reference "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" or retarget your application to a framework version which contains "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

感谢您的帮助。

按如下方式修改您的配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-[version]" newVersion="[version]" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-[version]" newVersion="[version]" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>


将[version]替换为您正在引用的
System.Runtime
System.Threading.Tasks
的版本(例如,2.5.10.0)。

真是一场噩梦!我发现了问题所在

Microsoft.Bcl
在我的例子中,Microsoft.Bcl和Microsoft.Bcl.Async似乎存在冲突。我使用以下命令删除了Microsoft.Bcl和Microsoft.Bcl.Async:

uninstall-package Microsoft.Bcl.Async -force
然后:

然后再次安装:

install-package Microsoft.Bcl.Async
现在它很有魅力。真不敢相信?也不知道为什么微软.Bcl会留在那里。删除Microsoft.Bcl.Async后,它会被甩在后面。到目前为止一切正常。还有一些测试要做

如果其他人对NuGet软件包有问题,您可以自担风险尝试:

update-package -pre
这将尝试回滚已更新的包。这就是我发现问题的原因

[编辑] 值得注意的是,经过进一步测试,卸载Microsoft.Bcl.Async时,不会删除Microsoft.Bcl。Microsoft.Bcl可以单独更新,并且此更新在Microsoft.Bcl.Async之外可能是一个问题。安装Microsoft.Bcl.Async时会安装Microsoft.Bcl


希望这能帮助别人

等待睡眠仍然会消耗线程池线程的时间。如果你没有适当的异步操作工具,你可能最好只使用完全同步的方法,而不是使用async over sync。这是一种测试方法,而不是我正在使用的实际方法。我正在运行一个SQL链接查询来代替睡眠。这是一个web应用程序吗?当您安装nugget软件包时,这些行是随附的吗?如果是这样,请删除
部分。我已经删除并重新安装了,看起来是这样的,是的,他们确实这样做了。感谢后续操作。很有帮助。太棒了——我不会认为这是一个包装问题。不确定我是否有部分软件包,或者我是否从未安装过它们,但我在卸载时出错,安装工作正常,错误刚刚消失。。我稍后会尝试连接这些点!
uninstall-package Microsoft.Bcl -force
install-package Microsoft.Bcl.Async
update-package -pre