这么多秒后如何调用方法?

在我的项目中,我希望能够在3分钟过后调用一个方法。 没有“主循环”可以说,所以我不能使用秒表并不断检查是否已经过了3分钟。 我能想到的唯一其他解决方案是一个间隔为3分钟的Timer对象,但这看起来相当混乱,因为它只会在3分钟延迟后调用一次。

谢谢阅读。

编辑:忘了提。 这是一个服务器应用程序,所以我不能暂停执行该线程,因为其他东西必须在此期间处理。 此外,这个计时器机制不会是孤立的。 一次可能有数百甚至数千个并发计时器。

我真的相信你对Timer对象的想法是正确的方法。 听起来你熟悉如何使用它 – 但这是一个例子:

  aTimer = new System.Timers.Timer(1000 * 60 * 3); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aTimer.Enabled = true; 

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

如果你有数百或数千个这样的计时器,一些计划将完成这项工作。

你真的应该调查quartznet

很多并发计时器表现不如我所经历的那样,quartznet会做的。

如果你真的想在你的应用程序中有这些调度任务,也许这篇文章给你一些想法.NET的任务调度程序类库

使用计时器。

虽然如果你创建一个1000计时器会有轻微的开销,但它不会太多。 定时器将完成他们的工作并在3分钟过后发动一次事件。 此外,如果您希望您的代码每3分钟重复一次,那么定时器就是您的选择。

定时器不是数百/数千的好解决方案,因为定时器是有限的资源。

是否所有方法都是从同一个应用程序调用的?

如果是这样,我将创建一个具有日期时间和Action的小存根类,并将委托添加到要调用的方法以及目标时间。 然后在后台线程循环遍历列表并在适当时调用委托(并显然删除它们)

另一种解决方案是为每个要调用的方法执行类似QueueUserWorkItem的操作,并且线程中的第一件事在适当的时间内hibernate,直到应该调用该方法。

对于所有解决方案(我和其他人),请注意在与GUI交互时必须执行的任何编组操作,或者为避免线程并发问题可能需要执行的任何锁定操作

在尝试了几个选项后,该方法不是自触发的。 因此,我使用Javascript来解决相同的问题,如下所示。