2013-10-18 57 views
13

我已經安裝了NuGet包爲異步的.NET Framework 4,Silverlight的4和5,和Windows Phone 7.5和8方法誤差從

的await和異步特性「不能等待 'System.Threading.Tasks.Task'
Version 1.0.16 

我使用的是Microsoft .NET 4.0,由於Web Hosting Package Restrictions,我無法升級。 (可悲!)

我的測試代碼:(我在做一個LINQ到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". 

感謝您的幫助。

+0

等待睡眠仍然會消耗線程池線程的時間。如果您沒有用於正確異步操作的工具,則最好使用完全同步的方法,而不是使用異步同步。 – Servy

+0

這是一種測試方法,而不是我正在使用的實際方法。我正在運行SQL鏈接查詢來代替睡眠。 –

+0

這是一個Web應用程序嗎? –

回答

34

什麼是惡夢!我發現了這個問題。

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.Async時,會安裝Microsoft.Bcl。

希望這可以幫助別人!

+0

感謝您的跟進。很有幫助。 – TSmith

+0

太棒了 - 我不會認爲這是一個包問題。不知道我是否有部分軟件包,或者我從來沒有安裝它們,但是我的卸載錯誤,並且安裝工作正常,並且錯誤消失了。我將盡力在稍後連接點! –

+0

非常感謝!!!! +1 –

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> 

更換[版]與版本(例如,2.5.10.0)的System.RuntimeSystem.Threading.Tasks所引用。

+0

謝謝,但我已經嘗試過。問題依然存在。 –

+0

當你安裝了塊金包,那些線是否與它一起出現?如果是這樣,請刪除''部分。 – Haney

+0

我已刪除並重新安裝,看起來如此,是的,他們這樣做。 –