我遇到了一个非常烦人的问题。我正在尝试编写一个简单的WinForm应用程序来显示Oracle Coherence缓存的内容。
由于某些原因,当我致电LockRecursionException
时,CacheFactory.GetCache("cacheName")
会被抛出。
保持读锁定可能无法获取写锁定。这种模式容易出现死锁。请确保在执行写锁定之前释放读锁定。如果需要升级,请使用升级锁代替读锁。
堆栈跟踪是:
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。相同的代码在一个单独的(更复杂的项目)中工作正常,所以我不确定出了什么问题。
答案 0 :(得分:2)
我建议在发生这种情况时查看所有线程。我想知道在调用表单构造函数的线程中是否有更深入调用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的补丁自述文件中提到这一点 特别的问题也得到了解决。