我需要在等待特定时间后执行我的代码。这应该异步发生,而不会阻塞我的线程。我在网上搜索并发现了很多方法可以做到这一点。两个选项是使用 System.Timers 或使用 RegisterWaitForSingleObject 和 ManualResetEvent。
我真的无法弄清楚其中的区别或何时更喜欢其中一个。 您能否简要告诉我为什么以及何时将 Timers 或 RegisterWaitForSingleObject 与 ManualResetEvent 结合使用?
旁注:我喜欢 TAP 和 TPL,并且通常比其他模式更喜欢这些(但这是否是不使用 System.Timer 的唯一原因?)
最佳答案
计时器
您使用 Timers当您希望相同的代码运行多次时,中间有特定的时间。
注册WaitForSingleObject
The documentation说得最好:
Registers a delegate that is waiting for a WaitHandle.
当您需要时,可以使用WaitHandle
wait for exclusive access to shared resources.
如果您不等待共享资源,那么它不适合您的用例。
手动重置事件
Represents a thread synchronization event that, when signaled, must be reset manually.
“发信号”和“重置”是您的代码需要执行的操作。当您的一个线程需要向另一个线程发出它可以继续的信号时使用它。
您的用例
你说:
I need my code to execute after waiting for a specific time.
如果您不需要一遍又一遍地重复代码,并且您不等待共享资源,也不等待另一个线程,那么上述方法都不合适。
如果您确实只需要等待一段特定的时间才能继续,那么,如前所述,请使用 Task.Delay
:
await Task.Delay(5000); //wait 5 seconds
关于c# - RegisterWaitForSingleObject 与 System.Timers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58763766/