using System; using System.Threading; using JD.Kernel.Classes; namespace JD.Threading { public class SafeAccessor where T : class { protected readonly T m_unsafeObject; public SafeAccessor(T unsafeObject) { m_unsafeObject = unsafeObject; } public IDisposable Use(out T unsafeObject) { Monitor.Enter(m_unsafeObject); unsafeObject = m_unsafeObject; try { return new DisposableHelper(() => Monitor.Exit(m_unsafeObject)); } catch { Monitor.Exit(m_unsafeObject); throw; } } } }