JD2022-TU1/main/tools/framework/JD.Threading/SafeAccessor.cs

33 lines
708 B
C#

using System;
using System.Threading;
using JD.Kernel.Classes;
namespace JD.Threading
{
public class SafeAccessor<T> 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;
}
}
}
}