मैं वर्तमान में नए System.Threading.Tasks .net में पाया कार्यक्षमता का उपयोग एक नया कार्यान्वयन के साथ कुछ घर पके हुए कार्य कार्यक्षमता की जगह रहा 4.कैसे सूचना है कि एक System.Threading.Tasks.Task पूरा कर लिया है पाने के लिए
हालांकि मुझे थोड़ा सा मुद्दा है, और हालांकि मैं कुछ समाधानों के बारे में सोच सकता हूं, मुझे कुछ सलाह चाहिए जो आम तौर पर ऐसा करने का सबसे अच्छा तरीका है, और यदि मुझे कहीं चाल चल रही है।
मुझे एक कार्य शुरू करने में सक्षम होने के लिए मनमाने ढंग से प्रक्रिया की आवश्यकता है, लेकिन फिर कार्य को समाप्त करने के लिए आगे बढ़ें और प्रतीक्षा न करें। कोई समस्या नहीं है, लेकिन जब मुझे किसी कार्य के परिणामस्वरूप कुछ करने की ज़रूरत है तो मुझे यह सुनिश्चित करने का सबसे अच्छा तरीका नहीं है।
मेरे द्वारा देखे गए सभी उदाहरण या तो कार्य पर प्रतीक्षा करें() कार्य पर परिणाम पैरामीटर को पूरा या संदर्भित करते हैं। ये दोनों धागे को अवरुद्ध करेंगे जो कार्य शुरू कर चुके हैं, जो मैं नहीं चाहता हूं।
कुछ समाधान मैं के बारे में सोचा है
एक नया धागा बनाने और उस पर काम शुरू करते हैं, तो नया थ्रेड ब्लॉक करने के लिए प्रतीक्षा करें() या .Result का उपयोग करें और परिणाम फोन करने वाले के लिए वापस सिंक किसी भी तरह, संभवतः कार्यों के लिए मतदान के साथ पूर्ण पैरामीटर है।
एक 'अधिसूचित पूरा करें' कार्य है जिसे मैं उस कार्य को पूरा करने के बाद शुरू कर सकता हूं जिसे मैं चलाने के लिए चाहता हूं जो तब एक स्थिर घटना या कुछ उठाता है।
कार्य के इनपुट में एक प्रतिनिधि को पास करें और यह बताएं कि कार्य समाप्त हो गया है।
मुझे लगता है कि कर सकते हैं या पक्ष-विपक्ष उन सभी को है, लेकिन मैं विशेष रूप से पर काम शुरू करने के लिए स्पष्ट रूप से एक नया धागा बनाने के लिए होने का विचार पसंद नहीं है जब का उपयोग करने के उद्देश्यों में से एक पहली जगह में कार्य वर्ग सीधे थ्रेड उपयोग से दूर होना है।
सबसे अच्छा तरीका के बारे में कोई विचार? क्या मुझे कुछ आसान याद आ रही है? एक 'पूर्ण' घटना के लिए पूछने के लिए बहुत अधिक होगा :)? (यही कारण है कि एक नहीं है सुनिश्चित करें कि इसका कोई खास कारण है!)
जिज्ञासा से, पृष्ठभूमिवर्कर का उपयोग क्यों नहीं करें? इसमें कार्य पूरा करने के साथ-साथ रद्दीकरण अधिसूचना भी है। – Robaticus
'BackgroundWorker' अब अब जरूरी नहीं है कि' टास्क 'हमारे साथ है। बीजीडब्ल्यू को 'सिंक्रनाइज़ेशन कॉन्टेक्स्ट' की आवश्यकता होती है, जो 'टास्क' के साथ वैकल्पिक है (अधिक समांतरता को सक्षम करता है)। –