我遇到了一个非常烦人的问题。我正在尝试编写一个简单的 WinForm 应用程序来显示 Oracle Coherence 缓存的内容。
出于某种原因LockRecursionException
,我打电话时会抛出a 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。相同的代码在单独的(更复杂的项目)中运行良好,所以我有点不确定出了什么问题。