JD2022-TU1/main/tools/framework/JD.TeaBoxAddinSystem/Addins/ThreadSafeReference.cs

62 lines
1.3 KiB
C#

using JD.Kernel.Classes;
using JD.Kernel.StaticHelpers;
namespace JD.TeaBoxAddinSystem.Addins
{
/// <summary>
/// Create a delay between the assignation of a value and its creation. Perfect for lazy loading.
/// </summary>
/// <typeparam name="T">Type of its internal value.</typeparam>
public class ThreadSafeReference<T> : Reference<T>
{
#region Variables
private readonly object m_lock = new object();
private readonly Provider<T> m_provider;
#endregion
#region Constructor/Destructor
private ThreadSafeReference(Provider<T> provider)
{
m_provider = provider;
}
public new static ThreadSafeReference<T> FromDelegate(Provider<T> provider)
{
return new ThreadSafeReference<T>(provider);
}
#endregion
#region Properties
public override T Value
{
get
{
if (!IsInitialized)
{
lock (m_lock)
{
return base.Value;
}
}
return base.Value;
}
}
#endregion
#region Methods
protected override T LoadValue()
{
return m_provider();
}
#endregion
}
}