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

问题描述 投票:0回答:2

我需要编写一段代码:

  1. 在每个配置的间隔运行
  2. 在一定时间后停止或在满足条件后停止。

我发现我可以使用TaskCancellationToken但我看不到任何选项在一个间隔内反复运行它。

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

有人可以推荐优雅的解决方案吗

c# multithreading
2个回答
-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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.