调用CacheFactory.GetCache时引发LockRecursionException
本文关键字:LockRecursionException CacheFactory GetCache 调用 | 更新日期: 2023-09-27 18:22:28
我遇到了一个非常烦人的问题。我正在尝试编写一个简单的WinForm应用程序来显示Oracle Coherence缓存的内容。
由于某种原因,当我调用CacheFactory.GetCache("cacheName")
时会抛出LockRecursionException
。
在保持读取锁定的情况下,可能无法获取写入锁定。这种模式容易出现死锁。在获取写锁定之前,请确保已释放读锁定。如果需要升级,请使用升级锁代替读取锁。
堆栈跟踪为:
at System.Threading.ReaderWriterLockSlim.TryEnterWriteLockCore(Int32 millisecondsTimeout)
at System.Threading.ReaderWriterLockSlim.TryEnterWriteLock(Int32 millisecondsTimeout)
at Tangosol.Util.ThreadGateSlim.Close(Int64 millis) in c:'hudson'workspace'Coh-NET-3.7.1'dev'release.net'coherence-net-v3.7.1'src'Coherence'Util'ThreadGateSlim.cs:line 26
我已经在表单构造函数中放置了以下代码,以及一个按钮单击事件处理程序,但仍然会引发异常。之前未调用任何其他内容:
using (var cache = CacheFactory.GetCache("cacheName"))
{
...get data from cache
}
以前有人见过这个吗?我使用的是.Net 4.0和Coherence 3.7.1.5。同样的代码在一个单独的(更复杂的项目)中运行良好,所以我有点不确定出了什么问题。
我建议在出现这种情况时查看所有线程。例如,我想知道在调用表单构造函数的线程中,是否有什么东西在更深层次调用Coherence。
--更新--
Patrick Fry(该功能区的首席工程师):
Coherence+.NET 4.0问题已在Coherence for.NET中解决3.7.1.7通过对COH-8044的修复JIRA没有具体提到锁定问题,但有一个专门针对这个问题提交的错误问题,它被复制为COH-8044。
https://bug.oraclecorp.com/pls/bug/webbug_print.show?c_rptno=14732333
我们应该在3.7.1.7的补丁自述中提到特定的问题也得到了解决。