我在MemoryCache中使用以下模式:public static T GetFromCache<T>(string key, Func<T> valueFactory) { var newValue = new Lazy<T>(valueFactory); var oldValue = (Lazy<T>)cache.AddOrGetExisting(key, newValue, new CacheItemPolicy()); return (oldValue ?? newValue).Value;}并稱之為:var v = GetFromCache<Prop>(request.Key, () => LongCalc());這工作得很好。但是,當(dāng)LongCalc拋出異常時,cache.AddOrGetExisting將異常保存到緩存中。我試圖通過以下方式確定何時發(fā)生這種情況:if (oldValue != null && oldValue.Value.GetType() == typeof(Exception)) { cache.Remove(key, CacheEntryRemovedReason.Evicted);}但簡單地調(diào)用oldValue.Value會引發(fā)異常。如何識別 oldValue 對象是否包含異常并進(jìn)行相應(yīng)處理?
與 Lazy<T> 一起使用時如何識別和排除 MemoryCache 中的異常?
阿波羅的戰(zhàn)車
2022-10-23 13:56:11