c# - RegisterWaitForSingleObject 与 System.Timers

标签 c# .net-core timer async-await task-parallel-library

我需要在等待特定时间后执行我的代码。这应该异步发生,而不会阻塞我的线程。我在网上搜索并发现了很多方法可以做到这一点。两个选项是使用 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.

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

手动重置事件

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/

相关文章:

json - net core 2.0 appsettings.json 保存在 bin 目录中

database - postgresql dotnet 核心连接字符串

javascript - 如何限制在 jQuery slider 上按下按键的频率?

c++ - 正确实现 Timer1 以生成 PWM

html - 更改 radio 选择

c# - 下载包 'runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk.2.1.1'失败

C# linq null 问题

java - 在 Unity Android 插件中访问和使用图像

c# - SQL DB 中的 Asp.net session 变量

asp.net-mvc - 具有多个用户存储的 Identity Server 4