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

发布于 2024-12-10 00:53:14 字数 251 浏览 0 评论 0原文

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

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

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

我该怎么做呢?

I'm trying to run my task immediately, then to run it by time interval.
I wrote the following :

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

The problem is the task starts only after the 15 seconds. I need to run my task at the beginning then to continue by time interval.

How would I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

唱一曲作罢 2024-12-17 00:53:14

你可以这样做:

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

You could do this:

var syncMailObservable =
    Observable
        .Interval(TimeSpan.FromSeconds(15.0), Scheduler.TaskPool)
        .StartWith(-1L);
syncMailObservable.Subscribe(s => MyTask());
若言繁花未落 2024-12-17 00:53:14

试试这个:

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

Try this:

Observable.Return(0).Concat(Observable.Interval(TimeSpan.FromSeconds(15)))
.Subscribe(_ => MyTask());
临走之时 2024-12-17 00:53:14

这个问题具体指的是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

This question refers to the Interval method specifically, but the Timer method can be used to accomplish this cleanly.

The Timer method supports an initial delay (due time). Setting it as a time span of zero should start the task at once, and then run it at each interval.

 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文