Я хочу инкапсулировать вызовы ASP.Net MemoryCache в классе, который работает с бизнес-типами.
Я написал это:
public interface IMyModelStore
{
MyModel RetrieveMyModel(Guid id);
void StoreMyModel(MyModel obj);
}
public sealed class InMemoryCache : IMyModelStore
{
public static InMemoryCache Instance { get; } = new InMemoryCache(TimeSpan.FromMinutes(30));
private readonly TimeSpan _expiration;
private readonly CacheItemPolicy _cachePolicy;
private InMemoryCache(TimeSpan expiration)
{
this._expiration = expiration;
_cachePolicy = new CacheItemPolicy
{
SlidingExpiration = _expiration
};
}
public RetrieveMyModel(Guid id)
{
if (id == Guid.Empty) throw new ArgumentOutOfRangeException(nameof(id));
return (MyModel)MemoryCache.Default.Get(id.ToString());
}
public void StoreMyModel(MyModel obj)
{
MemoryCache.Default.Add(obj.Id.ToString(), obj, _cachePolicy);
}
}
Мне кажется, что у меня нетиметь дело с безопасностью потока, потому что мой код только получает и передает данные в MemoryCache, который является потокобезопасным.
Я прав?
Единственный случай, который может вызвать проблемы, этокогда поток вызывает RetrieveMyModel одновременно, другой вызывает StoreMyModel с тем же идентификатором.