【问题标题】:What are the default Schedulers for each observable operator?每个可观察运算符的默认调度程序是什么?
【发布时间】:2013-03-11 15:03:30
【问题描述】:

This page on MSDN 声明

如果你不使用以调度器作为参数的重载,Rx 将使用最小并发原则选择一个默认调度器。这意味着选择引入满足操作员需求的最少并发量的调度程序。例如,对于返回带有有限且少量消息的 observable 的操作符,Rx 调用 Immediate。对于返回可能大量或无限数量的消息的运算符,调用 CurrentThread。对于使用定时器的算子,使用线程池。

我实际上想要一份参考表,可观察操作员使用哪个默认调度程序,但我在任何地方都找不到。 每个 observable operator 的默认调度器是什么?

【问题讨论】:

  • 我真的很惊讶某处没有一个列表......如果我有时间转储到它,我将遍历 rx 代码库,看看我是否可以编译一个列表,但不,我不知道有任何漂浮在网周围......
  • 是的,我也四处寻找,但无济于事。其中一些是显而易见的,但有些则不是!

标签: c# system.reactive


【解决方案1】:

哇,这可不是小事……

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

【讨论】:

  • 理想情况下,当您使用任何这些方法时,您应该传入自己的调度程序,以便您可以对代码进行单元测试。但是知道哪个最好用总是好的,所以这个列表非常适合!
  • @LeeCampbell 我个人对我必须挖多深才能找到它感到震惊……哎呀。 100% 同意“使用你自己该死的调度程序”,尽管如此。
  • 谢谢。 WhereSelectDo 呢?
  • @ColonelPanic - 很确定 WhereSelect 没有通过任何调度程序运行 - 不确定 Do
  • Do 当然也不是。
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 2023-03-06
  • 2013-04-17
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2016-02-20
相关资源
最近更新 更多