2013-03-11 4 views
30

This page on MSDN कहा गया है किप्रत्येक पर्यवेक्षक ऑपरेटर के लिए डिफ़ॉल्ट शेड्यूलर क्या हैं?

आप अधिभार जो एक तर्क के रूप में एक अनुसूचक लेता है का उपयोग नहीं करते हैं, तो आरएक्स एक डिफ़ॉल्ट अनुसूचक कम से कम संगामिति के सिद्धांत का उपयोग करके ले जाएगा। इसका अर्थ यह है कि शेड्यूलर जो कम से कम समेकन को प्रस्तुत करता है जो ऑपरेटर की आवश्यकताओं को पूरा करता है। उदाहरण के लिए, ऑपरेटर एक सीमित और छोटी संख्या में संदेशों के साथ एक अवलोकन योग्य लौटने के लिए, आरएक्स तत्काल कॉल करता है। संभावित संभावित या असीमित संदेशों को वापस करने वाले ऑपरेटरों के लिए, CurrentThread को कॉल किया जाता है। टाइमर का उपयोग करने वाले ऑपरेटरों के लिए, थ्रेडपूल का उपयोग किया जाता है।

मैं वास्तव में एक संदर्भ पत्र चाहता हूं जिसके लिए अवलोकन करने वाले ऑपरेटरों का उपयोग डिफ़ॉल्ट डिफ़ॉल्ट शेड्यूलर का उपयोग करता है, लेकिन मुझे कहीं भी नहीं मिल रहा है। प्रत्येक पर्यवेक्षक ऑपरेटर के लिए डिफ़ॉल्ट शेड्यूलर क्या हैं?

+1

मैं वास्तव में वहाँ isn हैरान हूँ ' एक सूची कहीं ... अगर मुझे इसमें डंप करने के लिए कुछ समय मिलता है, मैं आरएक्स कोडबेस के माध्यम से चलता हूं और देखता हूं कि मैं एक सूची संकलित कर सकता हूं, लेकिन नहीं, मुझे किसी भी फ़्लोटिंग 'नेट के चारों ओर नहीं पता है ... – JerKimball

+0

हाँ मैंने भी शिकार किया , कोई फायदा नहीं। उनमें से कुछ स्पष्ट हैं लेकिन कुछ वास्तव में नहीं हैं! – AlexFoxGill

उत्तर

46

वाह, यह पता लगाने के लिए तुच्छ नहीं था ...

System.Reactive.Concurrency नाम स्थान का आंत के भीतर गहरे, वहाँ एक आंतरिक स्थैतिक कक्षा, जो के रूप में घोषित किया जाता है SchedulerDefaults कहा जाता है:

internal static class SchedulerDefaults 
{ 
    internal static IScheduler AsyncConversions 
    { get { return DefaultScheduler.Instance; }} 

    internal static IScheduler ConstantTimeOperations 
    { get { return ImmediateScheduler.Instance; }} 

    internal static IScheduler Iteration 
    { get { return CurrentThreadScheduler.Instance; }} 

    internal static IScheduler TailRecursion 
    { get { return ImmediateScheduler.Instance; }} 

    internal static IScheduler TimeBasedOperations 
    { get { return DefaultScheduler.Instance; }} 
} 

AsyncConversions द्वारा किया जाता है:

Start, ToAsync, FromAsyncPattern 

ConstantTimeOperations द्वारा किया जाता है:

Empty, GetSchedulerForCurrentContext, Return, StartWith, Throw 

Iteration द्वारा किया जाता है:

Generate, Range, Repeat, TakeLast, ToObservable, and the ReplaySubject<T> 

TailRecursion द्वारा किया जाता है:

Run 

TimeBasedOperations द्वारा किया जाता है:

Buffer, Delay, DelaySubscription, Generate, Interval, Sample, Skip, SkipLast 
SkipUntil, Take, TakeLast, TakeLastBuffer, TakeUntil, Throttle, TimeInterval, 
Timeout, Timer, Timestamp, Window 
+0

बिल्कुल सही, धन्यवाद! – AlexFoxGill

+1

आदर्श रूप से आप अपने स्वयं के शेड्यूलर में पास करेंगे जब कभी भी आप इनमें से किसी भी विधि का उपयोग करते हैं ताकि आप इकाई को अपने कोड का परीक्षण कर सकें। लेकिन यह जानना हमेशा अच्छा होता है कि कौन सा सबसे अच्छा उपयोग करना है, इसलिए यह सूची उसके लिए बहुत अच्छी है! –

+0

@LeeCampbell मैं व्यक्तिगत रूप से आश्चर्यचकित था कि मुझे इसे खोजने के लिए कितना गहराई से खोदना पड़ा ... शीश। "अपने स्वयं के शापित शेड्यूलर का उपयोग करें" पर 100% सहमत हैं, वैसे। – JerKimball

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