方法错误“无法等待来自等待和异步属性的'系统.线程.任务.任务'
本文关键字:等待 任务 线程 系统 属性 错误 方法 异步 | 更新日期: 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.Runtime
和System.Threading.Tasks
的版本(例如 2.5.10.0)。