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 关注
- 109 浏览
添加回答
举报