gpt4 book ai didi

c# - RegisterWaitForSingleObject 与 System.Timers

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:58 25 4
gpt4 key购买 nike

我需要我的代码在等待特定时间后执行。这应该异步发生而不会阻塞我的线程。我在网上搜索并找到了很多方法来做到这一点。两个选项是使用 System.Timers 或使用 RegisterWaitForSingleObject 和 ManualResetEvent。

我无法真正弄清楚其中的区别或何时更喜欢一个。您能简要地告诉我为什么以及何时使用 Timers 或 RegisterWaitForSingleObject 和 ManualResetEvent 吗?

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

最佳答案

计时器

您使用 Timers当您希望相同的代码运行多次,中间有特定的时间量时。

RegisterWaitForSingleObject

The documentation说得最好:

Registers a delegate that is waiting for a WaitHandle.

WaitHandle 在您需要时使用

wait for exclusive access to shared resources.

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

手动重置事件

The documentation

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com