.Net 4 पर async-wait का उपयोग करना


137

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

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

अब मुझे पहले ऐसा करने के लिए एक कंपाइलर चुनने की आवश्यकता है:

  • VS2010 AsyncCTP के साथ
  • VS2012 पूर्वावलोकन (और एक बार आने के बाद अंतिम), लक्ष्य को .net 4.0 पर सेट करना
  • मोनो (जैसा दिखता है। 2.12 में async-wait है, मुझे पसंद है / मैं IDE के रूप में मोनोडेवलप पर VS का उपयोग करता हूं)

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

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

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

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

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

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

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


1
मुझे नहीं लगता कि आप एक सीटीपी संस्करण के साथ बहुत दूर हो जाएंगे क्योंकि आपको एक व्यावसायिक अनुप्रयोग के साथ सीटीपी का हिस्सा होने वाली किसी भी चीज़ का पुनर्वितरण करने की अनुमति नहीं होगी। निश्चित रूप से आसपास कीड़े पड़े हैं और यह प्रदर्शन के लिए अभी तक अनुकूलित नहीं है। आप शायद इसे तेजी से विकसित कर रहे हैं, लेकिन आपके ग्राहक बीटा सॉफ़्टवेयर स्थापित करने में खुश नहीं होंगे जो अंत में जारी किए गए संस्करणों के साथ हस्तक्षेप कर सकते हैं।
Alois Kraus

@ Alois AsyncCTP के बाद के संस्करण पुनर्वितरण की अनुमति देते हैं। और सबसे बुरी बात यह हो सकती है कि मेरा आवेदन टूट गया है। ऐसा नहीं है कि यह अन्य अनुप्रयोगों के साथ हस्तक्षेप कर सकता है, इसलिए मैं अंतिम संस्करण के साथ हस्तक्षेप पर आपके कॉन्सर्ट को नहीं समझता हूं। मेरे सवाल का एक हिस्सा यह भी है कि क्या कभी कोई अंतिम संस्करण होगा जो पहली बार में WinXP का समर्थन करता है।
कोडइन्चोस

1
लाइसेंस में स्पष्ट रूप से लिखा गया है (Async CTP 3) "1.a.ii। आप Microsoft से नोटिस पर तुरंत इस तरह के उपयोग को रोकने के लिए सहमत हैं;"। मुझे संदेह है कि यह नोटिस एमएस से तब आएगा जब इसे जारी किया जाएगा। मैं कोई वकील नहीं हूं, लेकिन मुझे यकीन है कि आपका कानूनी विभाग (यदि आपके पास एक है) आपके तर्क को सुनना पसंद करेगा, तो आप लाइसेंस की शर्तों को तोड़ने के बिना इसे कैसे प्राप्त करना चाहते हैं।
Alois Kraus

जवाबों:


106

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

आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: http://blogs.msdn.com/b/bclteam/archive/2013/04/04/17/microsoft-bcl-async-is-now-stable.aspx

आप पिछले संस्करण के बारे में यहां पढ़ सकते हैं: http://blogs.msdn.com/b/lucian/archive/2012/04/04/24/async-targeting-pack.aspx

जैसा कि यह पैक आधिकारिक रूप से समर्थित है, अब मुझे विश्वास है कि XP ​​+ async को लक्षित करने के लिए सबसे अच्छा विकल्प विजुअल स्टूडियो 2012 + C # 5 + Async लक्ष्यीकरण पैक का उपयोग करना होगा।

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


मुझे आपके AsyncBridge के लाइसेंस का कोई संदर्भ नहीं मिल रहा है?
टोंग


15
ध्यान रखें कि .NET 4.0 पर async टारगेटिंग पैक का उपयोग करने के लिए KB2468871 को इंस्टॉल करना होगा।
घोड़

KB2468871 जून 2011 में जारी किया गया था (और 6 महीने बाद v2 जारी किया गया था), लेकिन यह अभी भी स्थापित नहीं किया जा सकता है, इसलिए इसे वाईएक्स में कैसे देखें - stackoverflow.com/a/9506530/968003
एलेक्स क्लॉज़

24

यदि आप अन्य .Net भाषाओं पर विचार करने के लिए खुले हैं, तो F # आपकी समस्या को हल कर सकता है। यह वर्षों के लिए async {} संगणना अभिव्यक्ति है, और .Net 2.0 के साथ भी पीछे संगत है। न्यूनतम आवश्यकता Windows XP SP3 है। रनटाइम यहां डाउनलोड किया जा सकता है


4

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

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

विवरण यहाँ है

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


3

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

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

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

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

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

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

डाउनलोड पृष्ठ पर इसे कहते हैं :

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


मैं विकास में जो प्रयोग करता हूं वह मामूली बात है। प्रमुख मुद्दा यह है कि मुझे अपने WinXP उपयोगकर्ताओं को क्या सौंपना चाहिए। क्या आप मेरे आवेदन के साथ बंडल 2.12 का सुझाव देते हैं?
कोडइन्चोस

कल मैंने मोनो स्रोतों पर ध्यान दिया, और कम से कम कई मूल एसिंक्स कक्षाएं ( Async...Builderऔर ...Awaiter) बाकी मोनो से अलग करने के लिए बहुत कठिन हैं। वर्तमान में मैं फिर से लागू करने पर विचार कर रहा हूं AsyncCtpLibrary, संभवतः मोनो से थोड़ा उधार ले रहा हूं ।
कोडइन्चोस

पुनर्वितरण पर AsyncCtpLibrary, मुझे पता है कि यह सिद्धांत रूप में संभव है, लेकिन एक लाइसेंस के लिए कुछ अजीब खंड शामिल हैं। लेकिन मेरा मुख्य मुद्दा यह है कि लंबे समय में क्या होता है। यदि यह असमर्थित हो जाता है, और कोई भी इसमें कीड़े नहीं लगाता है, तो यह कष्टप्रद हो सकता है।
कोडइन्चोस

2

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

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

VS2012 के लिए, इसमें वही Async CTP शामिल है जहाँ तक मुझे याद है कि मेरे // बिल्ड / टैबलेट MS ने मुझे उस सम्मेलन में दिया था।


1
मैं VS2012 के रिलीज होने का इंतजार नहीं कर रहा हूं। मुझे उम्मीद है कि मेरे सॉफ्टवेयर अल्फा से बाहर होने से पहले VS2012 रिलीज हो जाएगा। लेकिन एक बार VS2012 रिलीज़ होने के बाद भी, मैं .net 4.5 को लक्षित नहीं करना चाहता, क्योंकि यह WinXP पर उपलब्ध नहीं है। तो मुख्य मुद्दा यह है कि async रनटाइम का उपयोग करने के लिए .net 4.
CodesInChaos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.