Запустите задачу сразу, затем через интервал времени, используя Rx Framework - PullRequest
8 голосов
/ 16 октября 2011

Я пытаюсь запустить свою задачу немедленно, а затем запустить ее по временному интервалу. Я написал следующее:

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

Проблема в том, что задание запускается только через 15 секунд. Мне нужно запустить свою задачу в начале, а затем продолжить с интервалом времени.

Как бы я это сделал?

Ответы [ 3 ]

14 голосов
/ 17 октября 2011

Вы можете сделать это:

var syncMailObservable =
    Observable
        .Interval(TimeSpan.FromSeconds(15.0), Scheduler.TaskPool)
        .StartWith(-1L);
syncMailObservable.Subscribe(s => MyTask());
3 голосов
/ 16 октября 2011

Попробуйте это:

Observable.Return(0).Concat(Observable.Interval(TimeSpan.FromSeconds(15)))
.Subscribe(_ => MyTask());
2 голосов
/ 11 февраля 2016

Этот вопрос старый и относится конкретно к методу 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

...