我创建了一个CachedRepository
如下所示的泛型:
public class CachedRepository<T> : ICachedRepository, IRepository<T> where T : BaseModel, new()
{
private static readonly Lock<T> TypeLock = new Lock<T>();
public void DeleteBatch(IQueryable<T> entities)
{
lock (TypeLock)
{
// delete logic here
}
}
public T GetNoTracking(int id)
{
lock (TypeLock)
{
// fetch by id logic here
}
}
}
通过使用通用对象来锁定,我将获得每种类型的锁定(即处理不同类型的线程不会一个接一个地等待)。但是,此类用于很少更改但读取量很大的对象列表,因此使用简单锁定lock
将延迟读取器,直到另一个读取器完成。
我查看了ReaderWriterLockSlim,但它不是通用类,如果我使用它,我会失去我现在拥有的类型锁定。
问题:如何在保持lock(generic_type_instance)
模式提供的类型锁定的同时减少对读者的锁定?