我正在重写一个必须调用数据库服务器的Windows 窗体应用程序。该调用最多可能需要 30 秒,因此我想缓存结果(它不会改变)。
多个事件如何触发对此信息的需求,具体取决于在 UI 中输入或选择的其他信息。可能需要该信息的不同 UI 组件彼此不知道。
我只想进行一次数据库调用。因此,如果您(用户)触发 30 秒的数据库调用(异步完成),然后 5 秒后应用程序的另一部分发现需要该信息,我不希望应用程序触发另一个数据库请求,只是因为缓存仍然是空的。我希望它等待剩余的 25 秒,直到信息可用,获取缓存的值,然后返回。
但我不太清楚如何在数据和代码方面构建它。
我将这种情况视为两个(或更多)请求,它们以某种方式排队,一旦数据库调用满足第一个请求,第二个请求就会获取现在缓存的结果值并返回。如果稍后其他东西(第三个东西)需要此信息,则请求将获取缓存的值并立即返回。
我想知道 .NET 中是否有内置模式或数据结构集来执行此操作。我觉得这几乎是——但不完全是——一种基本async/await
模式,只不过有多个事情正在等待相同的结果。
我正在考虑但无法想象的这种模式/架构是什么?