【发布时间】:2010-01-05 03:20:27
【问题描述】:
我正在构建一个需要在特定时间调用某个 API 的应用程序。我想为每个调用设置执行时间,并在每次调用需要执行时自动调用我的执行函数。最好的方法是什么?
我曾考虑为每个需要执行的新调用创建一个新计时器,并将计时器的唯一间隔设置为其执行时间。这是实现我需要的好方法还是有更有效的方法?
【问题讨论】:
标签: c# multithreading scheduling timer
我正在构建一个需要在特定时间调用某个 API 的应用程序。我想为每个调用设置执行时间,并在每次调用需要执行时自动调用我的执行函数。最好的方法是什么?
我曾考虑为每个需要执行的新调用创建一个新计时器,并将计时器的唯一间隔设置为其执行时间。这是实现我需要的好方法还是有更有效的方法?
【问题讨论】:
标签: c# multithreading scheduling timer
对于少数定时器/线程来说,这是一种合理的方法。对于较大的数字,您将使用一个设置为间隔的最大公分母的计时器,并让它选择适当的任务(如果有)来启动。
使用 Windows 计划任务几乎肯定是矫枉过正。
【讨论】:
我喜欢将单个线程(或线程池线程)与 ResetEvent(手动或自动)一起使用,并将超时设置为最快任务的一部分(例如每 5 秒一次)。在外部,您可以调用事件来处理待处理的调度,或者每次超时时,您也可以检查待处理的调度。
如果您将超时设置为最小间隔的一小部分(例如 30%),那么您可以很好地控制“检查”过程所花费的时间,但如果您错过了一个间隔,您有一个合理的时间段在其中分派任务。它还为您提供了合理启动的窗口。
可以通过维护一个有序列表来完成实施,该列表列出了接下来需要发生哪些 api 调用并将超时设置为其中的一部分。
【讨论】: