以间隔运行直到条件或某个时间过去

时间:2018-01-01 12:47:49

标签: c# multithreading

我需要编写一段代码:

  1. 在每个配置的时间间隔运行
  2. 在一定时间后或在满足条件后停止。
  3. 我发现我可以使用TaskCancellationToken,但我看不到任何选项可以在一个时间间隔内反复运行它。

    我看到的另一个选项是使用System.Threading.Timer - 但如果符合条件,我就无法取消该过程。

    有人可以提出一个优雅的解决方案吗?

2 个答案:

答案 0 :(得分:-1)

您可以使用Quartz。它可以帮助您轻松安排任务,您可以在特定时间,日期,间隔以及您需要的任何时间取消任务。

答案 1 :(得分:-1)

您可以使用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