2013-03-01 11 views
5

खैर .Net 4 में, नहीं है नए कार्य की सुविधा है और अगर मैं सब विधि (रों) है कि मैं अतुल्यकालिक रूप से या वहाँ निष्पादित करने के लिए चाहते हैं के लिए .Net 4.5 में Async/Await साथ alog उस पर भरोसा कर सकते हैं मैं सोच रहा था कुछ स्थितियां हैं जिन्हें मुझे एक अलग Thread का उपयोग करना होगा, विशेष रूप से मैंने पढ़ा है कि कार्य .Run विधि को अतुल्यकालिक रूप से निष्पादित करने के लिए ThreadPool का उपयोग करता है।कार्य .NET में धागे बनाम 4.5

निष्कर्ष: Async/Await के संयोजन का उपयोग Tasks के साथ Threads का उपयोग करने से मुझे मुक्त कर सकता है?

+0

यह पूरी तरह से निर्भर करता है कि आप क्या कर रहे हैं। – SLaks

+0

@SLaks तो क्या आप मुझे यह बताकर मुझे यह स्पष्ट कर सकते हैं कि मुझे अपना काम करने के लिए एक नया थ्रेड ट्रिगर कब करना चाहिए और जब थ्रेडपूल (टास्क.रुन कौन सा है) पर्याप्त है? –

उत्तर

5

यदि आप TaskCreationOptions.LongRunning विकल्प निर्दिष्ट करते हैं (वहां निरंतरता के बराबर भी है) तो कार्य थ्रेड पूल थ्रेड का उपयोग नहीं करेगा, यह नियमित Thread का उपयोग करेगा। तकनीकी रूप से यह एक कार्यान्वयन विस्तार है और चश्मे में नहीं है, लेकिन यह भरोसा करने के लिए पूरी तरह से अनुचित धारणा नहीं है।

यह देखते हुए कि, आप Task का उपयोग करके कुछ भी करने में सक्षम होना चाहिए जो आप सीधे Thread के साथ कर सकते हैं।

प्राथमिक मामला जो कि किसी व्यक्ति के लिए Thread का उपयोग करना चाहेगा, वह सीधे आपकी समांतर लाइब्रेरी बनाने में होगा, मान लीजिए कि आप इसे टीपीएल के शीर्ष पर नहीं बनाना चुनते हैं। हालांकि, व्यवसाय की संदर्भ के संदर्भ में यह महत्वपूर्ण नहीं है, अपनी खुद की लाइब्रेरी बनाते समय आपको एक विशिष्ट Thread ऑब्जेक्ट के अंतर्निहित विवरण तक पहुंच की आवश्यकता हो सकती है, या आप Tasks का उपयोग करने के ऊपर ओवरहेड (छोटे के रूप में) से बचना चाह सकते हैं।

और फिर भी, यदि आप अभी तक .NET 4.0 का उपयोग नहीं कर रहे हैं तो आपके पास Task का उपयोग करने का विकल्प नहीं है।

+0

मैं .NET 4.5 का उपयोग कर रहा हूं। साथ ही मैं पुस्तकालय बनाने के लिए नहीं जा रहा हूं, आजकल मेरे सारे काम विभिन्न चीजों के लिए अनुप्रयोग बनाने पर हैं, इसलिए मैं अपने सभी कोडों को सुंदर ढंग से पूरा करने का सबसे शक्तिशाली तरीका बनाना चाहता हूं। तो क्या मैं यह कह रहा हूं कि आप क्या कह रहे हैं कि मैं कार्य का उपयोग कर थ्रेड का उपयोग करके जो कुछ भी कर सकता हूं उससे निष्कर्ष निकाल सकता हूं? Async/Await के साथ संयोजन में कार्य का उपयोग करके केवल सभी एसिंक्रोनस काम करना संभव है? और आपके लिए तत्काल विस्तृत उत्तर के लिए धन्यवाद। –

+0

+1 मैं उन कार्यों के लिए LongRunning विकल्प की अनुशंसा करता हूं जिन्हें आप आमतौर पर थ्रेड के साथ उपयोग करेंगे ताकि आप आसानी से async/प्रतीक्षा कर सकें। ThreadPool धागे का उपयोग न करने के अन्य तरीके हैं; लेकिन, वे वास्तव में आपको async/await –

+0

@PeterRitchie के साथ वास्तव में बहुत कुछ नहीं खरीदते हैं: लेकिन केवल मेरे ज्ञान की पुष्टि करने के लिए एसिंक प्रतीक्षा है कि बस एक विधि का इंतजार करने के लिए डिज़ाइन किया गया है ताकि प्रोग्राम इसके पहले कोड की अगली पंक्ति तक संसाधित न हो बस वर्तमान प्रतीक्षा नौकरी खत्म करें कि सही है या Async/Await का एक और उपयोग है? –

संबंधित मुद्दे