使用Rx框架立即启动任务然后按时间间隔启动任务

时间:2011-10-16 13:54:07

标签: .net system.reactive

我正在尝试立即运行我的任务,然后按时间间隔运行它。 我写了以下内容:

var syncMailObservable = Observable.Interval(TimeSpan.FromSeconds(15));
syncMailObservable.Subscribe(s => MyTask());

问题是任务在15秒后才开始。我需要在开始时运行我的任务,然后按时间间隔继续。

我该怎么做?

3 个答案:

答案 0 :(得分:14)

你可以这样做:

var syncMailObservable =
    Observable
        .Interval(TimeSpan.FromSeconds(15.0), Scheduler.TaskPool)
        .StartWith(-1L);
syncMailObservable.Subscribe(s => MyTask());

答案 1 :(得分:3)

试试这个:

Observable.Return(0).Concat(Observable.Interval(TimeSpan.FromSeconds(15)))
.Subscribe(_ => MyTask());

答案 2 :(得分:2)

这个问题很老,具体是指Interval方法,但Timer方法可以用来干净利落地完成。

Timer方法支持初始延迟(到期时间)。将其设置为零时间跨度应立即启动任务,然后在每个时间间隔运行它。

 var initialDelay = new TimeSpan(0);
 var interval = TimeSpan.FromSeconds(15);

 Observable.Timer(initialDelay, interval, Scheduler.TaskPool)
     .Subscribe(_ => MyTask());

https://msdn.microsoft.com/en-us/library/hh229652(v=vs.103).aspx