第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與 Lazy<T> 一起使用時如何識別和排除 MemoryCache 中的異常?

與 Lazy<T> 一起使用時如何識別和排除 MemoryCache 中的異常?

C#
阿波羅的戰(zhàn)車 2022-10-23 13:56:11
我在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)處理?
查看完整描述

1 回答

?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗 獲得超4個贊

那是錯誤的做法。它永遠(yuǎn)不會與惰性評估一起使用,特別是如果您必須將其提升到多線程環(huán)境一次。傳遞一個(理想情況下,純 - 即無狀態(tài))回調(diào)Action<Exception>作為可選參數(shù),并確保有合理但足夠通用的默認(rèn)實現(xiàn)。

或者,至少,提供您的自定義ExceptionAwareLazy<T>,它將持有適當(dāng)?shù)臉?biāo)志。這樣的解決方案會更糟,但是沒有異步回調(diào)會打擾您。

PSReactiveExtensions是我建議的方法的好例子。您可以輕松地將您的解決方案包裝到TaskCompletionSource并堅持使用眾所周知的async/await.


查看完整回答
反對 回復(fù) 2022-10-23
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號