Tôi tự hỏi cái nào là cách tiếp cận tốt hơn để tải dữ liệu trong một chuỗi thời trang an toàn. Theo truyền thống, tôi đã sử dụng mẫu khóa kép và phục vụ mục đích khá tốt. Bây giờ, với việc bổ sung các loại System.Lazy, tôi tự hỏi, nếu dựa vào internals của Lazy và Loading là tốt hơn và làm công việc một cách tốt hơn nhiều. Nó trông sạch hơn và dễ đọc hơn nhưng nó có tốt hơn không?C# Luồng & Chặn
Mọi suy nghĩ?
namespace SomeNameSpace
{
public class DataStoreContext
{
private readonly static Lazy<DataStoreContext> context = new Lazy<DataStoreContext>(() => new DataStoreContext());
private Lazy<Dictionary<string, Entity>> _entities = new Lazy<Dictionary<string, Entity>>(() => { return DataStoreContext.Instance.Load(); });
private readonly object _syncRoot = new object();
private DataStoreContext()
{
}
public Dictionary<string, Entity> Data
{
get { return _entities.Value; }
}
public static DataStoreContext Instance
{
get { return context.Value; }
}
private Dictionary<string, Entity> Load()
{
// Load Data from some data store.
return null;
}
private Dictionary<string, Entity> LoadWithLock()
{
if (_entities == null)
{
lock (_syncRoot)
{
if (_entities == null)
{
Dictionary<string, Entity> entities = this.Load();
_entities = entities;
return _entities;
}
}
}
return _entities ;
}
public void Clear()
{
_entities = new Lazy<Dictionary<string, Entity>>(() => { return DataStoreContext.Instance.Load(); });
}
}
}
Tôi nhận thấy rằng tôi đã giới thiệu một lỗi mà tôi đã không nạp đúng các thực thể khi yêu cầu Clear() ngay lập tức. Tôi càng nhìn vào nó, tôi càng thích nó. Tôi sẽ bắt đầu sử dụng System.Lazy hơn. Cảm ơn bạn đã nhập. – Sam
@Sam, tôi rất vui vì tôi có thể hỗ trợ. –