c# - .net 4 पर async-await का उपयोग करना




.net-4.0 async-ctp (4)

मैं वर्तमान में एक ऐसा एप्लिकेशन बनाना शुरू कर रहा हूं जो सी # 5 की एसिंक-प्रतीक्षा सुविधा से बहुत लाभान्वित होगा। लेकिन मुझे यकीन नहीं है कि वीएस का कौन सा संस्करण और एसिंक रनटाइम का उपयोग करने के लिए।

ओएस लोकप्रियता चार्ट को देखते हुए, मुझे विंडोज़ XP का समर्थन तीन साल या उससे भी अधिक समय तक करना होगा। ऐसा लगता है कि .NET 4.5 केवल विंडोज के नए संस्करणों पर चलता है, इसलिए मुझे .NET 4.0 को लक्षित करने की आवश्यकता है। विकास मशीन विंडोज 7 का उपयोग करती है, इसलिए वीएस के एक नए संस्करण का उपयोग करना कोई समस्या नहीं है।

अब मुझे इसे करने के लिए पहले एक कंपाइलर चुनना होगा:

  • AsyncCTP के साथ वीएस -2010
  • VS2012 पूर्वावलोकन (और अंतिम बार आने पर अंतिम), लक्ष्य को .NET 4.0 पर सेट करना
  • मोनो (ऐसा लगता है कि 2.12 में एसिंक-प्रतीक्षा है, मैं आईडीओ के रूप में मोनो डेवेल पर वीएस के लिए उपयोग / पसंद करता हूं)

किसके पास कम कोड-जेन बग है? जॉन स्कीट के ब्लॉग को देखते हुए वीएस2012 पूर्वावलोकन सीटीपी की तुलना में कभी भी कोड जनरेटर का उपयोग नहीं करता है।

और अधिक महत्वपूर्ण बात यह है कि किस रनटाइम का उपयोग करना है?

क्या VS2012 में .NET 4 के उपयोग के लिए पुनर्वितरण योग्य एसिंक रनटाइम है?

मैं AsyncCTP रनटाइम को संदर्भित करके पूर्वावलोकन के साथ कोड संकलित करने में कामयाब रहा। लेकिन चूंकि सीटीपी में अजीब लाइसेंसिंग स्थितियां हैं, जो कि एक अच्छा दीर्घकालिक समाधान की तरह नहीं दिखती है।

या मुझे तीसरे पक्ष के कार्यान्वयन का उपयोग करना चाहिए? शायद मोनो में एक है?

लाइब्रेरी को वितरित करने के लिए मैं किसी भी प्रकार के इंस्टॉलर की बजाय, एप्लिकेशन के रूप में उसी निर्देशिका में डीएल डालना पसंद करता हूं।

मुझे यह भी पसंद आएगा यदि मेरी बाइनरी मोनो + लिनक्स / मैकोज़ पर बदलाव किए बिना काम करेगी। तो रनटाइम या तो जो भी मोनो (2.12 संभवतः) में बनाया गया है, या गैर विंडोज ओएस पर उपयोग की अनुमति के साथ संगत होना चाहिए।


एएसआईएनसी / प्रतीक्षा का उपयोग कर .NET 4.0 को लक्षित करने के लिए वीएस 12 बीटा का उपयोग करना संभव है।

आपको अपने प्रोजेक्ट में कुछ कोड कॉपी करने की आवश्यकता है जो कि कंपाइलर पर निर्भर करता है।

विवरण here

संपादित करें: हमने इस तकनीक को लिया है और इसे एसिंक ब्र्रिज नामक ओपन सोर्स लाइब्रेरी में बदल दिया है: https://nuget.org/packages/AsyncBridge


माइक्रोसॉफ्ट ने Nuget लिए प्रतिस्थापन के रूप में Nuget माध्यम से Async लक्ष्यीकरण पैक (Microsoft.Bcl.Async) जारी किया।

आप इसके बारे में यहां और अधिक पढ़ सकते हैं: 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 को लक्षित करने के लिए सबसे अच्छा विकल्प विजुअल स्टूडियो 2012 + सी # 5 + असिनक लक्ष्यीकरण पैक का उपयोग करेगा।

यदि आपको .NET 3.5 को लक्षित करने की आवश्यकता महसूस होती है, तो भी आप .NET 3.5 के लिए (my) AsyncBridge का उपयोग कर सकते हैं।


यदि आप अपने सॉफ़्टवेयर को वितरित करने में सक्षम होना चाहते हैं, तो मुझे लगता है कि मोनो समाधान वास्तव में आपका एकमात्र विकल्प है। आप यह भी कहते हैं कि आप अंत में लिनक्स और ओएस एक्स पर मोनो पर अंतिम परिणाम चलाना चाहते हैं। लक्ष्यीकरण मोनो को शुरू करने के लिए प्राकृतिक समाधान की तरह लगता है।

आपका अगला मुद्दा आईडीई है। मोनो डेवलपमेंट स्पष्ट रूप से अच्छी तरह से काम करेगा लेकिन आप कहते हैं कि आप विजुअल स्टूडियो पसंद करते हैं।

ग्रेग हर्लमन ने विजुअल स्टूडियो से मोनो 2.8 के खिलाफ कोड बनाने के लिए एक प्रोफ़ाइल बनाई । यदि आप उसके साथ अनुवर्ती हैं, तो वह विजुअल स्टूडियो में मोनो 2.11 / 2.12 के खिलाफ विकास के लिए आपको सही दिशा में इंगित करने में सक्षम हो सकता है।

बेशक, विजुअल स्टूडियो के लिए मोनो टूल्स भी हैं जो वाणिज्यिक उत्पाद है। मुझे लगता है कि यह अभी भी Xamarin द्वारा पेश किया जा रहा है।

आप .NET के शीर्ष पर मोनो से आवश्यक 4.5 प्रोफ़ाइल असेंबली चलाने में भी सक्षम हो सकते हैं लेकिन मैंने कोशिश नहीं की है। 4.5 प्रोफाइल 4.0 एपीआई का सख्त सुपर-सेट है। शायद इसे एक शॉट दें और वापस रिपोर्ट करें।

संपादित करें: ऐसा लगता है कि आप अब उत्पादन में विजुअल स्टूडियो असिंक सीटीपी का उपयोग कर सकते हैं

डाउनलोड पेज पर यह कहता है:

उत्पादन के उपयोग के लिए एक नया ईयूएलए शामिल है। नोट - यह लाइसेंस आपके उत्पादन कोड के लिए सीटीपी का उपयोग करने के लिए प्रोत्साहित नहीं करता है। सीटीपी एक असमर्थित और उपयोग-पर-अपने-जोखिम-प्रौद्योगिकी प्रौद्योगिकी पूर्वावलोकन का उपयोग करता है। हालांकि, हमें डेवलपर्स से उत्पादन कोड के लिए सीटीपी का उपयोग करने के लिए कई अनुरोध प्राप्त हुए हैं, और इसलिए इसे अनुमति देने के लिए लाइसेंस बदल दिया है।


यदि आप सी # 5.0 जारी करने के बाद अपने सॉफ्टवेयर को वितरित करना शुरू करना चाहते हैं, तो आप AsycnCTP का उपयोग करके विकास करना शुरू कर सकते हैं। अन्यथा मैं आपको इसका उपयोग करने की सलाह नहीं दूंगा, क्योंकि यह केवल सीटीपी है, यहां तक ​​कि बीटा भी नहीं। इसे बीटा चरण और रिलीज के बहुत करीब बदला जा सकता है। यह अस्थिर हो सकता है, आदि

यदि आप अपने आवेदन में आसान एसिंक ऑपरेशंस पेश करना चाहते हैं तो मैं आपको प्रतिक्रियाशील एक्सटेंशन और शीर्ष पर बने सामान (प्रतिक्रियाशील यूआई, आदि) का उपयोग करने की सलाह दूंगा, यह सिर्फ सुंदर है।

वीएस2012 के लिए, इसमें एक ही Async सीटीपी भी शामिल है, जहां तक ​​मुझे अपने // बिल्ड / टैबलेट एमएस से याद है, मुझे उस सम्मेलन में दिया गया है।





c#-5.0