【发布时间】:2015-08-31 19:14:03
【问题描述】:
我有一个要求,在 10 秒的初始延迟后,我需要每 10 分钟执行一次SomeMethod,但需要注意的是,10 分钟计时器应该在SomeMethod 完成后启动。这是粗略的例子:
Start Task 00:00:00
(10 second delay)
SomeMethod executed at 00:00:10 (takes 15 minutes)
(10 minute delay)
SomeMethod executed at 00:25:10
... and so on.
我知道如何使用 TPL 做到这一点。我可以使用 Task.Delay 启动任务并执行 SomeMethod,然后在每次完成后 (ContinueWith TaskStatus.RanToCompletion),我创建一个新任务并再次执行 SomeMethod。
我的问题是这可能使用Observable.Timer 吗?比如……
Observable.Timer(TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(10))
此代码的问题在于,如果 SomeMethod 需要 15 分钟,我将运行两个不同的 SomeMethod 实例,这是我不想要的。我希望 10 分钟计时器在 SomeMethod 完成后启动。这可以使用Observable 还是我应该留在TPL?
编辑:忘了说我希望SomeMethod 在它自己的线程中运行。
【问题讨论】:
标签: c# task-parallel-library system.reactive