【问题标题】:Method Error 'Cannot await 'System.Threading.Tasks.Task' from await and async properties来自等待和异步属性的方法错误“无法等待'System.Threading.Tasks.Task'
【发布时间】:2013-10-18 00:26:28
【问题描述】:

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

Version 1.0.16

我使用的是 Microsoft .NET 4.0,但由于 Web 托管包限制,我无法升级。 (可悲!)

我的测试代码:(我正在使用 Linq to SQL Query 代替 Thread.Sleep)

public class Search
{
public async Task<List<Result>> GetResults(string SearchString)
{
await System.Threading.Tasks.Task.Factory.StartNew(() => Thread.Sleep(1000));
}
}

我的错误:

Cannot await 'System.Threading.Tasks.Task'

http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx 谈到了这个错误,但这并不是真正的答案,因为我没有使用 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".

感谢您的帮助。

【问题讨论】:

  • 等待睡眠仍然会消耗线程池线程的时间。如果您没有适当的异步操作工具,您最好只使用完全同步的方法,而不是使用异步而不是同步。
  • 这是一种测试方法,而不是我使用的实际方法。我正在运行 SQL 链接查询来代替睡眠。
  • 这是一个网络应用程序吗?

标签: c# .net multithreading asynchronous


【解决方案1】:

真是一场噩梦!我找到了问题。

Microsoft.Bcl

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

uninstall-package Microsoft.Bcl.Async -force

然后:

uninstall-package Microsoft.Bcl -force

然后重新安装:

install-package Microsoft.Bcl.Async

现在它很有魅力。我不能相信这个?也不确定为什么首先将 Microsoft.Bcl 留在那里。删除 Microsoft.Bcl.Async 后,它会被抛在后面。到目前为止一切正常。还有一些测试要做。

如果其他人对 NuGet 包有疑问,您可以自行承担风险尝试:

update-package -pre

这将尝试回滚已更新的软件包。这就是我发现问题的方式。

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

希望这对其他人有所帮助!

【讨论】:

  • 感谢您的跟进。很有帮助。
  • 太棒了——我没想到这是一个包问题。不确定我是否有部分软件包,或者我根本没有安装它们,但是我在卸载时遇到了错误,安装工作正常,错误就消失了。我稍后会尝试连接这些点!跨度>
【解决方案2】:

如下修改你的配置:

<?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.RuntimeSystem.Threading.Tasks 的版本(例如,2.5.10.0)。

【讨论】:

  • 当你安装了 nugget 包的时候,这些行有没有附带?如果是这样,请删除 &lt;dependentAssembly&gt; 部分。
  • 我已经删除并重新安装,看起来是这样,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多