Stephen Toub blogged किक्या SynchronizationContext और TaskScheduler
दोनों SynchronizationContext और TaskScheduler पृथक्करणों हैं कि एक "अनुसूचक", कुछ है कि आप के लिए कुछ काम दे प्रतिनिधित्व करते हैं, और यह निर्धारित करता है कि कब और कहाँ करने के लिए के बीच वैचारिक अंतर नहीं है उस काम को चलाओ। शेड्यूलर के कई अलग-अलग रूप हैं। उदाहरण के लिए, थ्रेडपूल एक शेड्यूलर है: आप कॉल करने के लिए एक प्रतिनिधि को आपूर्ति करने के लिए ThreadPool.QueueUserWorkItem को कॉल करें, प्रतिनिधि कतारबद्ध हो जाता है, और थ्रेडपूल के धागे में से एक अंततः उठाता है और उस प्रतिनिधि को चलाता है। आपके यूजर इंटरफेस में शेड्यूलर भी है: संदेश पंप।
तो System.Reactive.Concurrency.EventLoopScheduler
, Dispatcher, ThreadPool, TaskScheduler, SyncrhonizationContext, और IScheduler implementations of Reactive Extensions सब उस अर्थ में "शेड्यूलर" कर रहे हैं।
उनके बीच क्या अंतर है?
वे सभी आवश्यक क्यों थे? मुझे लगता है कि मुझे इवेंट लूप, डिस्पैचर, थ्रेडपूल मिलता है। Ischeduler भी अच्छी तरह से समझाया जाता है।
लेकिन टास्कशेड्यूलर और सिंक्रोननाइजेशन कॉन्टेक्स्ट अभी भी मुझे स्पष्ट नहीं है।
Stephen Cleary's excellent article सिंक्रोननाइजेशन कॉन्टेक्स्ट समझाता है, और मुझे लगता है कि मुझे यह मिल गया है। फिर हमें टास्कशेड्यूलर की आवश्यकता क्यों थी, स्पष्ट नहीं है।
कृपया किसी स्रोत को समझाएं या इंगित करें।
उत्तर के सुझावों के कारण कई कारण हो सकते हैं। एक और जिसका उल्लेख अभी तक नहीं किया गया है, मैंने इस एमएसडीएन में पाया ब्लॉग आलेख: http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259082.aspx यह कहता है कि सिंक्रोननाइजेशन कॉन्टेक्स्ट.पोस्ट एसिंक्रोनस विधि कार्य आइटम निष्पादित होने पर अधिसूचना प्रदान नहीं करता है। आलेख बताता है कि कार्य को वापस करने के लिए TaskCompletionSource का उपयोग करने वाली एक एक्सटेंशन विधि को कैसे जोड़ना है। –