2011-11-17 6 views
10

मैं .NET 4.5 Async के बारे में पढ़ना शुरू कर रहा हूं लेकिन उपयोग की स्थिति में आने के लिए अभी तक सबसे अधिक नहीं मिल सकता है। इसलिए मैं इसे सीधे प्रश्न के साथ प्राप्त करने का प्रयास करूंगा:.NET 4.5 Async बनाम टीपीएल

मैं आम तौर पर अपने एएसपी.NET एप्लिकेशन के अंदर से महंगी वेब सेवाओं और डीबी कॉल को कॉल करने के लिए .NET 4 TPL का उपयोग करता हूं। लगता है कि मैं Async के साथ एक ही चीज़ प्राप्त कर सकते हैं। क्या ये सच है? किसका उपयोग करना है?

अग्रिम धन्यवाद।

उत्तर

15

टीपीएल समांतर कंप्यूटिंग के लिए एक पुस्तकालय है। .NET 4.5 async एक भाषा सुविधा है, जो टीपीएल के शीर्ष पर बनाई गई है, जो प्रक्रिया को आसान बनाता है। यह विशेष रूप से सच है जब आपके पास कई चरणों के साथ वर्कफ़्लो हैं।

संक्षेप में, async आपको अपना कोड लिखने देता है जैसे कि यह सिंक्रोनस था, इसलिए तार्किक प्रवाह बरकरार रहता है। कार्य पूरा करने की प्रतीक्षा करने की प्रक्रिया, जब ऐसा होता है तो विशिष्ट कोड चलाते हुए, async के साथ एक बहुत ही प्राकृतिक फैशन में किया जा सकता है। सी # 5.0 और वीबी 11.0 कंपाइलर्स आपके कोड को टीपीएल और कुछ नए async संबंधित प्रकारों का उपयोग कर समकक्ष सी # 4.0 और वीबी 10.0 कोड में बदलते हैं।

async के उत्कृष्ट अंडर-द-हूड स्पष्टीकरण के लिए, जॉन स्कीट की Eduasync ब्लॉग श्रृंखला देखें।

तो, आप कैसे तय करते हैं कि किस का उपयोग करना है? खैर, async मूल रूप से कोड टुकड़ों के अनुक्रम बनाने की सभी जटिलताओं को दूर करता है जो असीमित कॉल के साथ मिलकर बंधे होते हैं। संभवतः जब आप किसी वेब सेवा को कॉल करते हैं या डेटाबेस तक पहुंचते हैं, तो आप जो कुछ भी लौटाते हैं उसके साथ कुछ करना चाहते हैं। async आपको कॉलिंग और प्रसंस्करण कोड को एक साथ रखने की अनुमति देता है, जो आपके कोड को लिखना आसान बनाता है और बाद में भी आसानी से पढ़ना चाहिए।

+0

उत्तर के लिए धन्यवाद जेफरी, लेकिन अभी भी यह नहीं बता सकता कि किस समय उपयोग करना है ..उदाहरण के लिए वेब सेवा कॉल उदाहरण में कहें। –

+1

async का प्रयोग करें। यदि आपको कुछ ऐसा लगता है जिसे आप एसिंक के साथ नहीं जोड़ सकते हैं तो आगे बढ़ें और टीपीएल का उपयोग करें। अगर वह अस्पष्ट था। इसका उत्तर स्पष्ट रूप से स्पष्ट स्पष्टीकरण के रूप में चुना जाना चाहिए। – BentOnCoding

-1

मेरा अनुमान आंतरिक रूप से दोनों .Net TPL और async है, थ्रेडपूल धागे का उपयोग करता है। Async पारंपरिक BeginXXX/EndXXX पैटर्न के लिए एक सरलीकृत वाक्यविन्यास हो सकता है।

लेकिन अधिक महत्वपूर्ण बात यह है कि टीपीएल का उपयोग करता है, थ्रेडपूल थ्रेड और आपको महंगी परिचालन करने के लिए इसका उपयोग नहीं करना चाहिए क्योंकि समान धागे ढांचे द्वारा ही उपयोग किए जाते हैं। यदि आपके पास महंगा ऑपरेशन है (जैसा कि आपने उल्लेख किया है) तो टीपीएल का उपयोग करते समय थ्रेडशेडुलर की "लॉन्ग राइजिंग" प्रॉपर्टी को सेट करने के लिए एक नया स्टैंड अकेले धागा बनाना या बेहतर बनाना बेहतर है।

+4

महंगा I/O! = महंगा CPU –

0

@POLD BeginXXX/EndXXX के बारे में: मुझे लगता है कि आप चीजों को मिला रहे हैं।

  • पदावनत: अतुल्यकालिक प्रोग्रामिंग मॉडल (एपीएम)
  • पदावनत: इवेंट आधारित अतुल्यकालिक पैटर्न (EAP)
  • अप-टू-डेट सी # पर देख रहे हैं, वहाँ समानांतर कोड चलाने के 3 अलग अलग patterns हैं : टास्क आधारित अतुल्यकालिक पैटर्न (नल)

TPL नींव, जिस पर नल बनाया गया है। टीपीएल को .NET 4 में पेश किया गया था। Altough TPL और TAP किसी भी तरह माइक्रोसॉफ्ट डॉक्यूमेंटेशन में समान रूप से उपयोग किया जाता है। किसी भी तरह से, async/await तब सी # 5 के साथ पेश की जाने वाली एक भाषा सुविधा है, जिसका अर्थ है .NET 4.5, एक सरल तरीके से टीपीएल के लिए समर्थन देने के लिए।

The BeginXXX/EndXXX belongs to the APM style! तो इसका टीपीएल के साथ कुछ लेना देना नहीं है। इन एकाधिक संस्करणों ने अवलोकन को रखना मुश्किल बना दिया है।