मुझे लगता है कि मैंने टीपीएल में एक गंभीर बग देखा है। मुझे यकीन नहीं है। मैंने अपने सिर को खरोंचने में बहुत समय बिताया और व्यवहार को समझ नहीं पाया। क्या कोई मदद कर सकता है?टीपीएल में बग - टास्ककंटिन्यूशनऑप्शन। सिंक्रनाइज़ करें?
क्या मेरी परिदृश्य है:
- मुझे लगता है कि साधारण चीज़ करने वाला कार्य बनाएँ। कोई अपवाद नहीं आदि
- मैं निष्पादन सिंक्रोनस सेट के साथ एक निरंतरता पंजीकृत करता हूं। यह एक ही धागे पर होना चाहिए।
- मैं डिफ़ॉल्ट कार्यपत्रक (थ्रेडपूल) पर कार्य शुरू करता हूं। शुरुआती धागा आगे बढ़ता है और इसके लिए इंतजार कर रहा है।
- कार्य शुरू होता है। गुजरता।
- निरंतरता कार्य के समान थ्रेड पर शुरू होती है (पिछले कार्य को पूरा करने के लिए!) और अंतहीन पाश में प्रवेश करती है।
- प्रतीक्षा धागे के साथ कुछ भी नहीं होता है। आगे जाना नहीं चाहता। प्रतीक्षा पर अटक गया। मैंने डीबगर में चेक किया है, कार्य RunToCompletion है।
मेरा कोड यहां है। किसी भी मदद की सराहना करें!
// note: using new Task() and then Start() to avoid race condition dangerous
// with TaskContinuationOptions.ExecuteSynchronously flag set on continuation.
var task = new Task(() => { /* just return */ });
task.ContinueWith(
_task => { while (true) { } /* never return */ },
TaskContinuationOptions.ExecuteSynchronously);
task.Start(TaskScheduler.Default);
task.Wait(); // a thread hangs here forever even when EnterEndlessLoop is already called.
मुझे यह भी लगता है कि यह एक बग है। यहां प्रलेखन पृष्ठ है: http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskcontinuationoptions.aspx यह दुर्भाग्यवश, इस मामले के बारे में कुछ भी नहीं कहता है। – usr
कोई भी मौका आप कोड स्निपेट का विस्तार कर सकते हैं, इसलिए यह दूसरों के लिए प्रतिलिपि बनाने और चलाने के लिए पर्याप्त है? –
@usr - यह कहता है "केवल बहुत ही कम चलने वाली निरंतरता को समकालिक रूप से निष्पादित किया जाना चाहिए।" :) मैं सहमत हूं कि यह एक बग है, यद्यपि। –