2012-02-02 32 views
136

Tôi hiện đang bắt đầu tạo một ứng dụng có thể thu lợi nhiều từ tính năng không đồng bộ của C# 5. Nhưng tôi không chắc chắn phiên bản nào của VS và thời gian chạy async để sử dụng.Sử dụng tính năng chờ đợi không đồng bộ trên .net 4

Nhìn vào biểu đồ phổ biến OS, tôi cần hỗ trợ Windows XP thêm ba năm nữa. Có vẻ như .net 4.5 chỉ chạy trên các phiên bản Windows mới hơn, vì vậy tôi cần phải nhắm mục tiêu .net 4.0. Các máy phát triển sử dụng Windows 7, vì vậy việc sử dụng phiên bản mới hơn của VS không phải là vấn đề.

Bây giờ tôi cần phải đầu tiên chọn một trình biên dịch để làm điều này:

  • VS2010 với AsyncCTP
  • VS2012 Preview (và cuối cùng một lần nó đến), thiết lập các mục tiêu NET 4.0
  • Mono (Có vẻ như 2,12 có dạng đồng bộ đang chờ, tôi thích/am được sử dụng để VS trên MonoDevelop là IDE)

Loại nào có ít lỗi mã hơn? Nhìn vào Jon Skeet's blog Bản xem trước VS2012 sử dụng trình tạo mã không bao giờ so với CTP.

Và quan trọng hơn là thời gian chạy để sử dụng?

VS2012 có chứa thời gian chạy không đồng bộ phân phối lại để sử dụng với .net 4 không?

Tôi đã quản lý để biên dịch mã, với bản xem trước, bằng cách tham chiếu thời gian chạy AsyncCTP. Nhưng kể từ khi CTP có điều kiện cấp phép lạ, điều đó không giống như một giải pháp dài hạn tốt.

Hoặc tôi có nên sử dụng triển khai của bên thứ ba không? Có lẽ mono có một?

Để phân phối thư viện, tôi chỉ đơn giản là đặt dll vào cùng thư mục với ứng dụng, thay vì một số loại trình cài đặt.

Tôi cũng muốn nó nếu các tệp nhị phân của tôi hoạt động mà không có thay đổi về mono + Linux/MacOS. Vì vậy, thời gian chạy hoặc là nên tương thích với bất kỳ mono (2.12 có lẽ) đã được xây dựng trong, hoặc cho phép sử dụng trên các hệ điều hành windows không.

+1

Tôi không nghĩ rằng bạn sẽ đạt được một phiên bản CTP vì bạn sẽ không được phép phân phối lại bất kỳ thứ gì thuộc CTP với ứng dụng thương mại. Chắc chắn có các lỗi ẩn nấp xung quanh và nó chưa được tối ưu hóa cho hiệu năng.Bạn có thể sẽ phát triển nhanh hơn nhưng khách hàng của bạn sẽ không vui khi cài đặt phần mềm beta có thể can thiệp vào các phiên bản cuối cùng được phát hành. –

+0

@Alois Các phiên bản sau của AsyncCTP cho phép phân phối lại. Và điều tồi tệ nhất có thể xảy ra là ứng dụng của tôi bị hỏng. Nó không giống như nó có thể can thiệp với các ứng dụng khác, vì vậy tôi không thấy hiểu buổi hòa nhạc của bạn qua can thiệp với phiên bản cuối cùng. Ngoài ra một phần của câu hỏi của tôi là nếu có bao giờ sẽ có một phiên bản cuối cùng hỗ trợ WinXP ở nơi đầu tiên. – CodesInChaos

+1

Giấy phép nêu rõ (Async CTP 3) "1.a.ii. bạn đồng ý ngừng sử dụng ngay lập tức khi có thông báo từ Microsoft;". Tôi nghi ngờ thông báo này sẽ đến từ MS khi nó được phát hành. Tôi không có luật sư nhưng tôi chắc chắn bộ phận pháp lý của bạn (nếu bạn có một) rất thích nghe lý do của bạn như thế nào bạn muốn nhận được xung quanh điều này mà không vi phạm các điều khoản cấp phép. –

Trả lời

105

Microsoft phát hành Async Targeting Pack (Microsoft.Bcl.Async) qua Nuget như một sự thay thế cho AsyncCTP.

Bạn có thể đọc thêm tại đây: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx.

Bạn có thể đọc về phiên bản trước tại đây: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx.

Vì gói này được hỗ trợ chính thức, bây giờ tôi tin tùy chọn tốt nhất để nhắm mục tiêu XP + async sẽ sử dụng Visual Studio 2012 + C# 5 + Gói nhắm mục tiêu không đồng bộ.

Nếu bạn cảm thấy cần phải nhắm mục tiêu .NET 3.5, bạn vẫn có thể sử dụng (của tôi) AsyncBridge for .NET 3.5.

+0

Tôi không thể tìm thấy bất kỳ tham chiếu nào tới giấy phép cho AsyncBridge của bạn? – toong

+1

Kiểm tra tại đây: https://github.com/OmerMor/AsyncBridge/blob/master/src/AsyncBridge/readme.txt –

+14

Hãy nhớ rằng sử dụng gói nhắm mục tiêu không đồng bộ trên .NET 4.0 yêu cầu phải cài đặt KB2468871. – ghord

2

Nếu bạn muốn bắt đầu phân phối phần mềm của mình sau khi phát hành MS C# 5.0, bạn có thể bắt đầu phát triển bằng cách sử dụng AsycnCTP. Nếu không, tôi sẽ không khuyên bạn nên sử dụng nó, vì nó chỉ là CTP, thậm chí không phải là bản beta. Nó có thể được thay đổi rất nhiều gần với giai đoạn beta và phát hành. Nó có thể không ổn định, vv

Nếu bạn muốn giới thiệu các hoạt động không đồng bộ dễ dàng trong ứng dụng của mình, tôi khuyên bạn nên sử dụng Tiện ích mở rộng và công cụ được xây dựng trên đầu (UI phản ứng, v.v.), nó chỉ là beautiul.

Đối với VS2012, nó cũng chứa cùng một Async CTP theo như tôi nhớ từ // Build/tablet MS đã cho tôi tham gia hội nghị đó.

+1

Tôi không quan tâm đến việc chờ bản phát hành VS2012. Tôi hy vọng VS2012 sẽ được phát hành trước khi phần mềm của tôi hết hạn alpha. Nhưng ngay cả khi VS2012 được phát hành, tôi không muốn nhắm mục tiêu .net 4.5, vì điều đó dường như không có sẵn trên WinXP. Vì vậy, vấn đề chính là thời gian chạy async để sử dụng trên .net 4. – CodesInChaos

3

Nếu bạn muốn có thể phân phối phần mềm của mình, tôi nghĩ rằng giải pháp Mono thực sự là lựa chọn duy nhất của bạn ngay bây giờ. Bạn cũng nói rằng bạn muốn kết quả cuối cùng chạy trên Mono trên Linux và OS X. Nhắm mục tiêu Mono để bắt đầu với vẻ như là giải pháp tự nhiên.

Vấn đề tiếp theo của bạn là IDE. MonoDevelop rõ ràng sẽ hoạt động tốt nhưng bạn nói bạn thích Visual Studio hơn.

Greg Hurlman created a profile để mã chống lại Mono 2.8 từ Visual Studio. Nếu bạn theo dõi anh ta, anh ta có thể chỉ cho bạn đúng hướng để phát triển chống lại Mono 2.11/2.12 trong Visual Studio.

Tất nhiên, cũng có Mono Tools for Visual Studio là sản phẩm thương mại. Tôi cho rằng nó vẫn đang được cung cấp bởi Xamarin.

Bạn cũng có thể chạy các cấu hình hồ sơ 4,5 yêu cầu từ Mono trên đầu trang của .NET nhưng tôi chưa thử. Hồ sơ 4.5 là một bộ siêu nghiêm ngặt của API 4.0. Có lẽ cho nó một shot và báo cáo lại.

EDIT: Dường như có lẽ bạn có thể sử dụng Visual Studio Async CTP trong sản xuất hiện nay

Đây là những gì nó nói trên download page:

Bao gồm một EULA mới để sử dụng sản xuất. Lưu ý - Giấy phép này không cấu thành sự khuyến khích để bạn sử dụng CTP cho mã sản xuất của bạn . CTP là bản xem trước công nghệ không được hỗ trợ và sử dụng. Tuy nhiên, chúng tôi đã nhận được nhiều yêu cầu từ nhà phát triển để sử dụng CTP cho mã sản xuất và do đó đã thay đổi giấy phép để cho phép điều đó.

+0

Những gì tôi sử dụng trong phát triển là vấn đề nhỏ. Vấn đề chính là những gì tôi nên trao cho người dùng WinXP của mình. Bạn có đề xuất gói mono 2.12 với đơn đăng ký của tôi không? – CodesInChaos

+0

Hôm qua tôi nhìn vào các nguồn đơn âm, và ít nhất một số lớp không đồng bộ lõi ('Async ... Builder' và' ... Awaiter') rất khó tách rời khỏi phần còn lại của mono. Hiện tại tôi đang xem xét việc triển khai lại 'AsyncCtpLibrary', có thể vay một chút từ mono. – CodesInChaos

+0

Khi phân phối lại 'AsyncCtpLibrary', tôi biết rằng có thể về nguyên tắc, nhưng đối với một giấy phép có chứa một vài mệnh đề lạ. Nhưng vấn đề chính của tôi ở đây là những gì xảy ra trong thời gian dài. Nếu nó không được hỗ trợ, và không ai sửa lỗi trong đó, điều đó có thể gây phiền toái. – CodesInChaos

24

Nếu bạn đang mở để xem xét các ngôn ngữ khác .Net, F # có thể giải quyết vấn đề của bạn. Nó có biểu thức tính toán async {} trong nhiều năm và tương thích ngược ngay cả với .Net 2.0. Yêu cầu tối thiểu là Windows XP SP3. Thời gian chạy có thể được tải xuống here.

3

Có thể sử dụng phiên bản VS 12 beta để nhắm mục tiêu .NET 4.0 bằng cách sử dụng async/await.

Bạn cần phải sao chép một số mã vào dự án của mình để cung cấp các loại trình biên dịch dựa vào.

Chi tiết here

Edit: chúng tôi đã thực hiện kỹ thuật này và biến nó thành một thư viện mã nguồn mở gọi AsyncBridge: https://nuget.org/packages/AsyncBridge

Các vấn đề liên quan