RegisterWaitForSingleObject与System.Timers

我需要我的代码在等待特定时间后执行。这应该异步发生而不阻塞我的线程。我在网上搜索,发现有很多方法可以做到这一点。有两种选择是使用System.Timers或使用RegisterWaitForSingleObject和ManualResetEvent。

我真的无法弄清楚两者之间的区别,或者什么时候更喜欢一个。 您能简要告诉我为什么以及何时将Timers或RegisterWaitForSingleObject与ManualResetEvent一起使用吗?

旁注:我喜欢TAP和TPL,并且通常比其他模式更喜欢它们(但这是不使用System.Timer的唯一原因吗?)

uxxi198549 回答:RegisterWaitForSingleObject与System.Timers

您可以使用WaitForSingleObject来等待,直到信号通知对象处于特定状态为止。或发生超时。所以这不是您想要做的。您希望代码在特定时间内被“暂停”。所以这里的“时间”是主要结果。

我将尝试使用Task.Delay(ms)。这似乎是当今最方便的方法。

,

计时器

当您希望同一代码多次运行且之间有特定时间间隔时,请使用Timers

RegisterWaitForSingleObject

The documentation说得最好:

  

注册正在等待WaitHandle的代表。

如果需要,可以使用WaitHandle

  

等待独占访问共享资源。

如果您不等待共享资源,则不适合您的用例。

ManualResetEvent

The documentation

  

表示线程同步事件,当发出信号时,必须手动将其重置。

“信号发送”和“重置”是您的代码需要做的事情。当您的一个线程需要向另一个线程发出可以继续运行的信号时,就会使用它。

您的用例

您说:

  

我需要等待一段时间后才能执行代码。

如果您不需要一遍又一遍地重复代码,并且不必等待共享资源,也不需要等待另一个线程,那么上述方法都不适合。

如果您真的只需要等待特定的时间才能继续前进,则如上所述,请使用Task.Delay

await Task.Delay(5000); //wait 5 seconds
本文链接:https://www.f2er.com/3139089.html

大家都在问