首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WaitHandle AsyncWaitHandle

WaitHandle AsyncWaitHandle
EN

Stack Overflow用户
提问于 2014-01-19 08:48:04
回答 2查看 571关注 0票数 1

我正在实现一个WCF服务,它最终在一个称为BeginExecuteReaderBeginExecuteScalar的数据库上运行一些存储过程。我无法决定我需要哪个AsyncWaitHandle实现。我想了两个选择:

  1. 简单的一个: 公共System.Threading.WaitHandle AsyncWaitHandle { get {返回m_manualResentEvent;}
  2. ,它使用锁保护m_ManualResentEvent。 公共WaitHandle AsyncWaitHandle { get { if (m_manualResentEvent!= null) {返回m_manualResetEvent;} lock (ThisLock) { if (m_manualResetEvent == null) { m_manualResetEvent =新ManualResetEvent(isCompleted);}返回m_manualResetEvent;}}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-19 08:55:01

更新

正如您在注释中提到的,您正在实现IAsyncResult。我可以从微软的这里这里中找到两个样本。在这两种情况下,他们都选择了你的第二选择。我只能认为它是这样做的,因为ManualResetEvent并不总是被使用,所以它节省了资源,只在需要时才创建。

原始

就我所见,第一个线程争用线程的机会似乎更少(等待锁),而不会失去任何东西。我假设在第一个选项中,ManualResetEvent是在构造函数中初始化的实例成员。如果是这样的话,我会选择第一个。

你用这个事件的可能性有多大?如果根本不可能,那么您可能需要考虑第二个问题,因为它将帮助您避免消耗资源,并且线程争用是不可能的。

票数 1
EN

Stack Overflow用户

发布于 2014-01-19 12:15:11

WCF无论如何都不会使用该事件,因为这会破坏任何效率的提高。如果您正在执行异步以获得效率和/或可伸缩性,请不要使用等待句柄。扔一个NotImplementedException

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

https://stackoverflow.com/questions/21214783

复制
相关文章

相似问题

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