为我的Observable扩展方法选择“默认”调度程序

时间:2013-12-17 06:14:37

标签: c# system.reactive scheduler

(我已经看过this个问题,但是......)

我试图找出如何为我的Observable扩展方法选择默认调度程序。

第一个例子:这会陷入困境。在'生产'代码,如果我不使用Scheduler.Default

离开当前主题
public static IObservable<T> ResponsiveSample<T>(this IObservable<T> src, 
                                TimeSpan interval, IScheduler scheduler = null)
{
    scheduler = scheduler ?? Scheduler.Default;
    return src.Publish(xs => xs.Take(1).Concat(xs.Sample(interval, scheduler)));
}

第二个例子(从here被盗)。这一个在当前线程上是可以的。

public static IObservable<T> RetryAfterDelay<T>(this IObservable<T> source, 
                       TimeSpan dueTime, IScheduler scheduler = null)
{
    return RepeateInfinite(source, dueTime, scheduler).Catch();
}

private static IEnumerable<IObservable<T>> RepeateInfinite<T>(IObservable<T> src, 
                               TimeSpan dueTime, IScheduler scheduler = null)
{
    yield return source; // Don't delay the first time

    scheduler = scheduler ?? Scheduler.CurrentThread;
    while(true)
        yield return source.DelaySubscription(dueTime, scheduler);
}

问题:是否有经验法则可以帮助我预测哪个默认调度程序可能会对调用代码造成最小的麻烦?

0 个答案:

没有答案