如果你不使用以调度器为参数的重载,Rx 将使用最小并发原则选择一个默认调度器。这意味着选择引入满足操作员需求的最少并发量的调度程序。例如,对于返回带有有限且少量消息的 observable 的操作符,Rx 调用 Immediate。对于返回可能大量或无限数量的消息的运算符,调用 CurrentThread。对于使用计时器的运算符,使用 ThreadPool。
我实际上想要一份参考表,可观察操作员使用哪个默认调度程序,但我在任何地方都找不到。每个可观察运算符的默认调度程序是什么?
如果你不使用以调度器为参数的重载,Rx 将使用最小并发原则选择一个默认调度器。这意味着选择引入满足操作员需求的最少并发量的调度程序。例如,对于返回带有有限且少量消息的 observable 的操作符,Rx 调用 Immediate。对于返回可能大量或无限数量的消息的运算符,调用 CurrentThread。对于使用计时器的运算符,使用 ThreadPool。
我实际上想要一份参考表,可观察操作员使用哪个默认调度程序,但我在任何地方都找不到。每个可观察运算符的默认调度程序是什么?
哇,这不是微不足道的发现......
在命名空间的深处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