首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReaderWriterLock从不抛出ApplicationException

ReaderWriterLock从不抛出ApplicationException
EN

Stack Overflow用户
提问于 2016-08-15 17:52:21
回答 2查看 167关注 0票数 1

即使在AcquireReaderLock( timeout )或AcquireWritterLock(timeout)中的超时间隔过期后,也不会抛出ApplicationException。有人知道为什么吗?

代码语言:javascript
复制
        try
        {
            _readWritterLock.AcquireReaderLock(3000);
            IEnumerable<TEntity> result;
            try
            {
                result = _xmlReader.GetAll();
            }
            catch
            {

                result = new List<TEntity>();
            }
            finally
            {
                _readWritterLock.ReleaseReaderLock();
            }
            return result;
        }
        catch (ApplicationException)
        {
            System.Diagnostics.Debug.WriteLine("App Exception");
            return new List<TEntity>();
        }
EN

回答 2

Stack Overflow用户

发布于 2016-08-15 18:07:31

如果你使用的是Visual studio 2015,那么你可以在调试-> Windows ->异常设置(默认情况下是Ctrl+ALt+E )的异常设置中启用它。然后转到公共语言运行时异常,你会在那里找到它。在Visual Studio 2013中,您可以在公共语言运行库Exceptions->System.中找到它对其他产品不太确定

票数 0
EN

Stack Overflow用户

发布于 2016-08-15 20:38:41

以下是一个最小但完整的程序的示例:

代码语言:javascript
复制
public static void Main()
{
   var rwl = new ReaderWriterLock();
   rwl.AcquireWriterLock(1000);

   var t1 = new Thread(() =>
   {
      try
      {
         rwl.AcquireReaderLock(1000);
         Console.WriteLine("Acquired lock successfully");
      }
      catch (ApplicationException)
      {
         Console.WriteLine("Time out");
      }
   });

   t1.Start();
   t1.Join();

   rwl.ReleaseWriterLock();
}

如果您复制粘贴代码并运行它,您将看到输出是:

超时

..。不出所料。因此,ReaderWriterLock类确实会像预期的那样抛出ApplicationException

看看你能不能做同样的事。创建一个小的main,将您正在做的事情精简到最基本的部分,直到您可以缩小问题的范围。如果你还在苦苦挣扎,请在这里发布最小但完整的代码,这样我们就可以复制、粘贴并运行它。

不管您的问题是什么,您都应该考虑使用更新的ReaderWriterLockSlim类。请注意它在ReaderWriterLock类的注释部分中所说的内容:

.NET框架有两个读取器-写入器锁,ReaderWriterLockSlimReaderWriterLoc。对于所有新的开发,建议使用ReaderWriterLockSlimReaderWriterLockSlim类似于ReaderWriterLock,但它简化了递归以及升级和降级锁状态的规则。ReaderWriterLockSlim避免了许多潜在死锁的情况。此外,ReaderWriterLockSlim的性能明显优于ReaderWriterLock

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

https://stackoverflow.com/questions/38952893

复制
相关文章

相似问题

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