हां Scheduler.Default
निर्दिष्ट करने और शेड्यूलर निर्दिष्ट नहीं करने के बीच एक अंतर है। Scheduler.Default
का उपयोग एसिंक्रोनस और संभवतः समवर्ती व्यवहार पेश करेगा, जबकि शेड्यूलर की आपूर्ति नहीं करने से ऑपरेटर के विवेकानुसार इसे छोड़ दिया जाएगा। कुछ ऑपरेटर सिंक्रनाइज़ निष्पादित करना चुनते हैं जबकि अन्य असीमित रूप से निष्पादित करेंगे, जबकि अन्य थ्रेड कूदने का विकल्प चुनेंगे।
यह संभवतः एक बुरा विचार है (प्रदर्शन और संभवतः यहां तक कि शुद्धता के कारण भी बहुत अधिक सहमति आपको डेडलॉक स्थिति में ले जा सकती है) प्रत्येक आरएक्स ऑपरेटर को Scheduler.Default
की आपूर्ति करने के लिए। यदि आपके पास कोई विशिष्ट शेड्यूलिंग आवश्यकता नहीं है, तो शेड्यूलर की आपूर्ति न करें और ऑपरेटर को जो चाहिए उसे चुनने दें।
उदाहरण के लिए,
इस तुल्यकालिक पूरा हो जाएगा:
int result = 0;
Observable.Return(42).Subscribe(v => result = v);
result == 42;
जबकि इस (एक और धागा पर और अधिक संभावना) में अतुल्यकालिक पूरा हो जाएगा:
int result = 0;
Observable.Return(42, Scheduler.Default).Subscribe(v => result = v);
result == 0;
// some time later
result == 42;
शुक्रिया.लेकिन क्या हुआ अगर मैं चाहता हूँ परीक्षण उद्देश्यों के लिए एक टेस्टशेड्यूलर प्रदान करें? –