首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegisterWaitForSingleObject对System.Timers

RegisterWaitForSingleObject对System.Timers
EN

Stack Overflow用户
提问于 2019-11-08 09:26:28
回答 2查看 181关注 0票数 2

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

我真的搞不懂区别,也不知道什么时候更喜欢哪一种。您能简单地告诉我为什么和什么时候在ManualResetEvent中使用计时器或ManualResetEvent吗?

Sidenote:我喜欢TAP和TPL,通常比较喜欢其他模式(但这是不使用System.Timer的唯一原因吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-08 13:01:21

定时器

当您希望同一代码多次运行时,您可以使用计时器,其间有特定的时间。

RegisterWaitForSingleObject

文献资料说最好:

注册正在等待WaitHandle的委托。

当您想要使用WaitHandle时,

等待共享资源的独占访问。

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

ManualResetEvent

文献资料

表示在发出信号时必须手动重置的线程同步事件。

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

您的用例

你说过:

我需要在等待特定时间后执行我的代码。

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

如果您确实需要等待一定的时间才能继续前进,那么,正如前面提到的,请使用Task.Delay

代码语言:javascript
复制
await Task.Delay(5000); //wait 5 seconds
票数 2
EN

Stack Overflow用户

发布于 2019-11-08 09:43:16

您可以使用WaitForSingleObject来等待,直到发出信号显示对象处于特定状态。或者发生超时。所以这不是你想做的。您希望您的代码“暂停”一段特定的时间。所以这里的“时间”是主要的结果。

我会尝试和等待Task.Delay(ms)一起去。现在看来,这是最方便的做法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58763766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档