我需要编写一段代码:
我发现我可以使用Task
和CancellationToken
但我看不到任何选项在一个间隔内反复运行它。
我看到的另一个选项是使用System.Threading.Timer
- 但是如果满足条件,我就无法取消该过程。
有人可以推荐优雅的解决方案吗
您可以使用Reactive Extensions轻松完成此操作:
int maxDurationInseconds = 5;
bool condition = true;
var timer = Observable.Interval(TimeSpan.FromSeconds(1))
.TakeWhile(i => i <= maxDurationInseconds)
.TakeWhile(i => condition)
.Subscribe(i =>
{
Console.WriteLine(i);
});
Console.ReadLine();
timer.Dispose();
上面的代码将显示到达阈值或条件变为false之前经过的秒数。 i
代表通过的秒数。
可以找到一个很好的Rx参考here。或者看看GitHub repo。
你可以使用Quartz。它可以帮助您轻松安排任务,您可以在特定时间,日期,间隔以及您需要的任何时间取消任务。