1 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
我建議在這里對函數(shù)式編程進(jìn)行一定的心理轉(zhuǎn)變。
將sessionID
其視為獨(dú)立值流而不是單個(gè)對象。然后可以通過以下(語義等效)方式重新定義您的問題:給定一個(gè)類型化的流(string
在您的情況下),如何觀察其流程并對傳入的更改做出反應(yīng),而您的源代碼無法控制?
嗯,有一個(gè)由 Enterprise? 證明的答案:反應(yīng)式擴(kuò)展。
從技術(shù)上講,這種轉(zhuǎn)變意味著您正在處理IObservable<string>
控制器的內(nèi)部,它可以通過標(biāo)準(zhǔn)的 .NET Core DI 方法注入,或者簡單地由構(gòu)造函數(shù)定義。這是非常靈活的,因?yàn)?code>rX它為您提供了完全可測試、令人難以置信的強(qiáng)大工具集來處理此類任務(wù);rX
也與本機(jī)兼容,Task
因此也與async/await
功能兼容。不錯(cuò)的事實(shí)是,從外部世界注入所需的行為并用更合適的行為來裝飾現(xiàn)有的 observable 非常容易:因此,您是安全的:一旦第 3 方的服務(wù)邏輯發(fā)生更改,您幾乎可以立即輕松地采用您的代碼庫。
里面會(huì)是什么IObservable<string>
?好吧,我不能說,因?yàn)槟銢]有提供足夠的信息。這可能是一個(gè)間隔,詢問遠(yuǎn)程服務(wù)器當(dāng)前sessionID
是否仍然有效,如果不是 - 運(yùn)行重新登錄程序并通知它的訂閱者新值;它可能是一個(gè)負(fù)責(zé)編譯時(shí)已知過期規(guī)則的計(jì)時(shí)器rX
,它可能是您需要的復(fù)雜邏輯:足夠靈活,不會(huì)限制您使用它可以實(shí)現(xiàn)的目標(biāo),只要您處理(可能是無限的)流.
因此,這意味著您不需要任何全局值。只需訂閱會(huì)話 ID 流并獲取最新的 - 當(dāng)前有效的,完成工作并處理您的訂閱。它不貴,不會(huì)影響性能;兩者都不會(huì)破壞并發(fā)性。如果您想堅(jiān)持一種常見的 .NET 方式,請rX
使用它Task
。await
PS 交付實(shí)施所需的 99% 已經(jīng)存在;你只需要結(jié)合它。
- 1 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報(bào)