Saat ini saya mulai membuat aplikasi yang akan mendapat banyak keuntungan dari fitur async-await C # 5. Tapi saya tidak yakin versi VS dan runtime asinkron mana yang akan digunakan.
Melihat grafik popularitas OS, saya perlu mendukung Windows XP selama tiga tahun atau lebih. Sepertinya .net 4.5 hanya berjalan pada versi Windows yang lebih baru, jadi saya perlu menargetkan .net 4.0. Mesin pengembangan menggunakan Windows 7, jadi menggunakan versi VS yang lebih baru tidak menjadi masalah.
Sekarang saya harus memilih kompiler untuk melakukan ini:
- VS2010 dengan AsyncCTP
- VS2012 Preview (dan final setelah itu tiba), menetapkan target ke .net 4.0
- Mono (Sepertinya 2.12 memiliki async-await, saya lebih suka / saya terbiasa VS daripada MonoDevelop sebagai IDE)
Manakah yang memiliki lebih sedikit bug code-gen? Melihat blog Jon Skeet, VS2012 Preview tidak pernah menggunakan generator kode selain CTP.
Dan yang lebih penting runtime mana yang akan digunakan?
Apakah VS2012 berisi runtime asinkron yang dapat didistribusikan ulang untuk digunakan dengan .net 4?
Saya berhasil mengkompilasi kode, dengan pratinjau, dengan merujuk runtime AsyncCTP. Tetapi karena CTP memiliki persyaratan perizinan yang aneh, itu sepertinya bukan solusi jangka panjang yang baik.
Atau haruskah saya menggunakan implementasi pihak ketiga? Mungkin mono punya satu?
Untuk mendistribusikan pustaka, saya lebih suka meletakkan dll di direktori yang sama dengan aplikasi, daripada semacam penginstal.
Saya juga suka jika binari saya berfungsi tanpa perubahan pada mono + Linux / MacOS. Jadi runtime harus kompatibel dengan mono apa pun (mungkin 2.12) yang telah terpasang, atau mengizinkan penggunaan pada OS non-windows.
Jawaban:
Microsoft merilis Async Targeting Pack (Microsoft.Bcl.Async) melalui Nuget sebagai pengganti AsyncCTP.
Anda dapat membaca lebih lanjut di sini: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx .
Anda dapat membaca tentang versi sebelumnya di sini: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .
Karena paket ini secara resmi didukung, saya sekarang yakin opsi terbaik untuk menargetkan XP + async adalah menggunakan Visual Studio 2012 + C # 5 + Async Targeting Pack.
Jika Anda merasa perlu menargetkan .NET 3.5, Anda masih dapat menggunakan AsyncBridge (saya) untuk .NET 3.5 .
sumber
Jika Anda terbuka untuk mempertimbangkan bahasa .Net lainnya, F # dapat menyelesaikan masalah Anda. Itu telah memiliki ekspresi komputasi {} asinkron selama bertahun-tahun, dan kompatibel ke belakang bahkan dengan .Net 2.0. Persyaratan minimum adalah Windows XP SP3. Runtime dapat diunduh di sini .
sumber
VS 12 beta dapat digunakan untuk menargetkan .NET 4.0 menggunakan async / await.
Anda perlu menyalin beberapa kode ke dalam proyek Anda yang menyediakan tipe yang diandalkan oleh compiler.
Detailnya di sini
Sunting: kami telah mengambil teknik ini dan mengubahnya menjadi perpustakaan sumber terbuka yang disebut AsyncBridge: https://nuget.org/packages/AsyncBridge
sumber
Jika Anda ingin dapat mendistribusikan perangkat lunak Anda, saya pikir solusi Mono benar-benar satu-satunya pilihan Anda saat ini. Anda juga mengatakan bahwa Anda ingin hasil akhirnya berjalan di Mono melalui Linux dan OS X. Menargetkan Mono untuk memulai sepertinya merupakan solusi alami.
Masalah Anda berikutnya adalah IDE. MonoDevelop jelas akan bekerja dengan baik tetapi Anda mengatakan Anda lebih suka Visual Studio.
Greg Hurlman membuat profil untuk mengkodekan Mono 2.8 dari Visual Studio. Jika Anda menindaklanjutinya, dia mungkin dapat mengarahkan Anda ke arah yang benar untuk mengembangkan terhadap Mono 2.11 / 2.12 di Visual Studio.
Tentunya ada juga Mono Tools for Visual Studio yang merupakan produk komersil. Saya berasumsi bahwa itu masih ditawarkan oleh Xamarin .
Anda mungkin juga dapat menjalankan rakitan profil 4,5 yang diperlukan dari Mono di atas .NET tetapi saya belum mencobanya. Profil 4.5 adalah kumpulan super ketat dari API 4.0. Mungkin mencobanya dan laporkan kembali.
EDIT: Sepertinya Anda dapat menggunakan Visual Studio Async CTP dalam produksi sekarang
Inilah yang tertulis di halaman unduhan :
sumber
Async...Builder
dan...Awaiter
) sangat sulit dipisahkan dari mono lainnya. Saat ini saya sedang mencari implementasi ulangAsyncCtpLibrary
, mungkin meminjam sedikit dari mono.AsyncCtpLibrary
, saya tahu bahwa hal itu pada prinsipnya mungkin, tetapi untuk satu lisensi berisi beberapa klausul yang aneh. Tapi masalah utama saya di sini adalah apa yang terjadi dalam jangka panjang. Jika itu menjadi tidak didukung, dan tidak ada yang memperbaiki bug di dalamnya, itu mungkin mengganggu.Jika Anda ingin mulai mendistribusikan perangkat lunak Anda setelah MS merilis C # 5.0, maka Anda dapat mulai mengembangkan menggunakan AsycnCTP. Kalau tidak, saya tidak akan merekomendasikan Anda untuk menggunakannya, karena ini hanya CTP, bahkan bukan beta. Itu dapat banyak diubah dekat dengan tahap beta dan rilis. Mungkin tidak stabil, dll.
Jika Anda ingin memperkenalkan operasi asinkron yang mudah dalam aplikasi Anda, saya akan merekomendasikan Anda untuk menggunakan Ekstensi Reaktif dan hal-hal yang dibangun di atas (UI Reaktif, dll), itu hanya cantik.
Sedangkan untuk VS2012, ini juga berisi Async CTP yang sama sejauh yang saya ingat dari // Build / tablet yang diberikan MS saya pada konferensi itu.
sumber