方法错误'无法等待来自await和async属性的'System.Threading.Tasks.Task'

Rus*_*ail 13 .net c# multithreading asynchronous

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

Version 1.0.16
Run Code Online (Sandbox Code Playgroud)

我使用的是Microsoft .NET 4.0,由于Web Hosting Package Restrictions,我无法升级.(可惜!)

我的测试代码:(我正在使用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));
}
}
Run Code Online (Sandbox Code Playgroud)

我的错误:

Cannot await 'System.Threading.Tasks.Task'
Run Code Online (Sandbox Code Playgroud)

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".
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Rus*_*ail 34

什么样的恶梦!我发现了这个问题.

Microsoft.Bcl
Run Code Online (Sandbox Code Playgroud)

在我的情况下,Microsoft.Bcl和Microsoft.Bcl.Async出现冲突.我使用以下命令删除了Microsoft.Bcl和Microsoft.Bcl.Async:

uninstall-package Microsoft.Bcl.Async -force
Run Code Online (Sandbox Code Playgroud)

然后:

uninstall-package Microsoft.Bcl -force
Run Code Online (Sandbox Code Playgroud)

然后再次安装:

install-package Microsoft.Bcl.Async
Run Code Online (Sandbox Code Playgroud)

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

如果其他人遇到NuGet包问题,您可以自担风险:

update-package -pre
Run Code Online (Sandbox Code Playgroud)

这将尝试回滚已更新的包.这就是我发现问题的方法.

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

希望这有助于他人!