方法错误“无法等待来自等待和异步属性的'系统.线程.任务.任务'

本文关键字:等待 任务 线程 系统 属性 错误 方法 异步 | 更新日期: 2023-09-27 18:35:48

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

Version 1.0.16

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

我的测试代码:(我正在执行 Linq to SQL 查询来代替 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".

感谢您的帮助。

方法错误“无法等待来自等待和异步属性的'系统.线程.任务.任务'

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

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 时安装的。

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

按如下方式修改配置:

<?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>

将 [版本] 替换为您引用的System.RuntimeSystem.Threading.Tasks的版本(例如 2.5.10.0)。