1 回答

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