[英]Using async-await on .net 4
我現在開始創建一個可以從C#5的async-await功能中獲益的應用程序。 但我不確定使用哪個版本的VS和async運行時。
看看操作系統受歡迎程度圖表,我需要再支持Windows XP三年左右。 看起來.net 4.5僅在較新版本的Windows上運行,因此我需要以.net 4.0為目標。 開發機器使用Windows 7,因此使用較新版本的VS不是問題。
現在我需要先選擇一個編譯器來執行此操作:
哪一個代碼生成錯誤較少? 看看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。 運行時可以在這里下載。
如果您希望能夠分發您的軟件,我認為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.