(我已经看过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);
}
问题:是否有经验法则可以帮助我预测哪个默认调度程序可能会对调用代码造成最小的麻烦?