Я в недоумении с использованием политики кэширования из проекта Полли.Я настроил все в соответствии с примерами, и в принципе это похоже на работу.
Я написал модульный тест, в котором значение успешно извлекается, помещается в кеш и читается из кеша позже.вызовы.Однако когда я запускаю код в основном контексте asp.net, он работает не так, как ожидалось.Завершенное действие выполняется, и значение извлекается.Однако метод «положить в кэш» никогда не выполняется.Я попытался использовать свой собственный IAsyncCacheProvider для устранения проблемы.И его метод PutAsync никогда не вызывается в контексте asp.net.Однако он вызывается при запуске в модульном тесте.
Здесь конфигурация моей службы
services.AddSingleton<IAsyncCacheProvider, MemoryCacheProvider>();
services.AddSingleton<IPolicyRegistry<string>, PolicyRegistry>();
А вот выдержки из класса, вызывающего проблемы.
public Bar(
IPolicyRegistry<string> policyRegistry,
IService service,
IAsyncCacheProvider cacheProvider)
{
this.policyRegistry = policyRegistry;
this.service = service;
this.cacheProvider = cacheProvider;
}
public Task<bool> Foo(Guid id)
{
var cachePolicy = this.GetPolicy();
return cachePolicy.ExecuteAsync(
_ => this.service.Foo(id),
new Context("policyKey" + id));
}
private CachePolicy<bool> GetPolicy()
{
if(!this.policyRegistry.TryGet(PolicyKey, out CachePolicy<bool> policy))
{
policy = Policy.CacheAsync<bool>(
this.cacheProvider.AsyncFor<bool>(),
TimeSpan.FromMinutes(5),
(c, s) => { },
(c, s) => { },
(c, s) => { },
(c, s, e) => { },
(c, s, e) => { });
this.policyRegistry.Add(PolicyKey, policy);
}
return policy;
}
Есть идеи, что может вызвать такое поведение?Когда я ставлю точки останова, он никогда не пытается добавить возвращаемое значение в кеш.Там нет никаких исключений либо.