2012-12-09 104 views
2

我有一個應用程序使用異步CTP庫能夠使用async/await關鍵字,並且我知道C#的實際版本5.0默認具有此功能,並且它不是所有確切版本的異步CTP 。我的意思是說,例如在異步CTP中存在TaskEx並且在C#5.0中不存在,則爲Task。c#4.0,異步CTP和異步C#5.0兼容?

但是,由於這些差異,我想知道異步方法返回的Task對象是否相同。

在我的情況下,我有一個存儲庫訪問數據庫的接口。此刻的存儲庫是由使用C#4.0的類實現的,但它可以使用asyc CTP來返回任務並使用await keyowrd。但是在將來,我想使用其他使用C#5.0的類。

如果我的interace定義了一個返回任務的方法,我可以使用C#4.0的類和使用C#5.0的類來實現此接口嗎?或者在異步CTP和C#5.0中的Task對象中存在差異?

PD:我更正了C#的版本,我的意思是5,0而不是C#4.5。

PD2:似乎VS2012我可以使用Microsoft.Bcl.Async和Microsoft.CompilerServices.AsyncTargetingPack在目標是.NET 4.0的項目中使用asyn/await關鍵字。但我不知道它們之間的差別。

+3

你的意思是[C#5.0](http://stackoverflow.com/questions/247621/what-are-the-correct-version-numbers-for-c)? – rae1

+0

是的,我的意思是c#5.0和.NET 4.5。 –

回答

2

與返回的類型相同Task。這種類型是在.NET 4.0中引入的,作爲Task Parallel Library的一部分。

但是,如果我是你,我會升級一切到VS2012,用Microsoft.Bcl.Async替換異步CTP。底層編譯器類型不同(並且互不兼容),並且Async CTP中存在已知的錯誤以及安裝問題。

+0

Microsoft.Bcl.Async和Microsoft.CompilerServices.AsyncTargetingPack有什麼區別?我看到ATP是在Bcl之前發佈的,但Bcl是beta版本,ATP是最終版本。 –

+0

我相信ATP是第一次嘗試更新VS2012的Async CTP。 Bcl.Async是一個更全面的方法(支持更多平臺);我期望Bcl.Async可以棄用ATP。但是,AFAIK,微軟並沒有說明這一點。 –