什么是延迟线程启动直到特定时间的最佳方法?

时间:2010-01-05 03:20:27

标签: c# multithreading scheduling timer

我正在构建一个需要在特定时间调用某个API的应用程序。我想为每个调用设置执行时间,并在每次调用需要执行时自动调用我的执行函数。最好的方法是什么?

我考虑过为每个需要执行的新调用创建一个新的Timer,定时器的唯一间隔设置为执行时间。这是实现我需要的好方法还是更高效的方式?

2 个答案:

答案 0 :(得分:2)

对于少数计时器/线程来说,这是一种合理的方法。对于大量数字,您将使用一个设置为间隔的最大公分母的计时器,并选择要启动的适当任务(如果有)。

使用Windows预定任务几乎肯定是矫枉过正的。

答案 1 :(得分:0)

我喜欢将单个线程(或线程池线程)与ResetEvent(手动或自动)一起使用,并将超时设置为最快任务的某个部分(比如一次5秒)。在外部,您可以调用事件来处理待处理的调度,或者每次超时时,您还可以检查待处理的调度。

如果您将超时设置为最小间隔的一小部分(比如30%),那么您可以控制“检查”过程需要多长时间,但如果您错过了一个间隔,则您有一段合理的时间在哪里派遣任务。它还为您提供合理启动的窗口。

可以通过维护一个有序列表来完成实现,该列表下一步需要进行api调用,并将超时设置为其中的一小部分。