簡體   English   中英

在.net 4上使用async-await

[英]Using async-await on .net 4

我現在開始創建一個可以從C#5的async-await功能中獲益的應用程序。 但我不確定使用哪個版本的VS和async運行時。

看看操作系統受歡迎程度圖表,我需要再支持Windows XP三年左右。 看起來.net 4.5僅在較新版本的Windows上運行,因此我需要以.net 4.0為目標。 開發機器使用Windows 7,因此使用較新版本的VS不是問題。

現在我需要先選擇一個編譯器來執行此操作:

  • 帶有AsyncCTP的VS2010
  • VS2012預覽(最后一次到達),將目標設置為.net 4.0
  • Mono(看起來像2.12有async-await,我更喜歡/習慣使用VS而不是MonoDevelop作為IDE)

哪一個代碼生成錯誤較少? 看看Jon Skeet的博客 ,VS2012 Preview使用的是永不代碼生成器而不是CTP。

更重要的是使用哪個運行時?

VS2012是否包含可再發行的異步運行時與.net 4一起使用?

通過引用AsyncCTP運行時,我設法通過預覽編譯代碼。 但由於CTP具有奇怪的許可條件,這看起來不是一個好的長期解決方案。

或者我應該使用第三方實施? 也許單聲道有一個?

為了分發庫,我更喜歡將dll放在與應用程序相同的目錄中,而不是某種安裝程序。

如果我的二進制文件在單聲道+ Linux / MacOS上沒有變化的情況下工作,我也會喜歡它。 因此運行時應該與內置的任何單聲道(可能是2.12)兼容,或者允許在非Windows操作系統上使用。

Microsoft通過Nuget發布了Async Targeting Pack(Microsoft.Bcl.Async)作為AsyncCTP的替代品。

您可以在此處閱讀更多相關信息: http//blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx

你可以在這里閱讀以前的版本: http//blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx

由於這個包是官方支持的,我現在相信針對XP + async的最佳選擇是使用Visual Studio 2012 + C#5 + Async Targeting Pack。

如果你覺得需要以.NET 3.5為目標,你仍然可以使用(我的) AsyncBridge for .NET 3.5

如果您願意考慮其他.Net語言,F#可以解決您的問題。 它已經有多年的async {}計算表達式,並且即使使用.Net 2.0也向后兼容。 最低要求是Windows XP SP3。 運行時可以在這里下載。

可以使用VS 12 beta來使用async / await來定位.NET 4.0。

您需要將一些代碼復制到項目中,以提供編譯器所依賴的類型。

細節在這里

編輯:我們采用了這種技術並將其轉換為名為AsyncBridge的開源庫: https ://nuget.org/packages/AsyncBridge

如果您希望能夠分發您的軟件,我認為Mono解決方案現在是您唯一的選擇。 你還說你希望最終結果能夠通過Linux和OS X在Mono上運行。開始定位Mono似乎是一個自然的解決方案。

您的下一個問題是IDE。 MonoDevelop顯然會運行良好,但你說你更喜歡Visual Studio。

Greg Hurlman從Visual Studio 創建了一個針對Mono 2.8編碼的配置文件 如果你跟進他,他可能會指出你在Visual Studio中針對Mono 2.11 / 2.12進行開發的正確方向。

當然,還有Mono Tools for Visual Studio ,它是一種商業產品。 我認為它仍然由Xamarin提供。

您也可以在.NET上運行Mono所需的4.5配置文件程序集,但我還沒有嘗試過。 4.5配置文件是4.0 API的嚴格超集。 也許試一試並報告。

編輯:看起來您現在可以在生產中使用Visual Studio Async CTP

以下是它在下載頁面上的內容

包括用於生產的新EULA。 注 - 本許可證不鼓勵您將CTP用於生產代碼。 CTP仍然是一個不受支持且自行使用的技術預覽版。 但是,我們收到了很多開發人員要求將CTP用於生產代碼的請求,因此更改了許可證以允許這樣做。

如果您想在MS發布C#5.0之后開始分發軟件,那么您可以使用AsycnCTP開始開發。 否則我不建議你使用它,因為它只是CTP,甚至不是beta。 它可以在beta階段和發布階段發生很大變化。 它可能不穩定等

如果你想在你的應用程序中引入簡單的異步操作,我建議你使用Reactive Extensions和構建在頂層的東西(Reactive UI等),它只是美化。

至於VS2012,它還包含相同的Async CTP,據我記得//建立/平板電腦MS給我的那個會議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM