答案 0 :(得分:0)
我之前已经有了这个,解决方法是将所有请求编组到某种队列中,或者在数据库/缓存中设置忙标志,以便后续请求知道某些事情正在解决这个问题。
因此首先请求标志为忙并执行请求。以下请求看到它正忙,并将等待标志不再标记为忙。然后,这些请求应该能够提取缓存的副本。
答案 1 :(得分:0)
有趣的场景。但是,您尚未指定如何缓存信息以及代码的运行方式。 如果您正在使用ASP.Net缓存(和WCF / Web服务),我认为它不支持像这样的更复杂的场景。 如果你想要一些解决方法的想法(正如我所说,只是想法,我之前没有尝试过),你可以尝试缓存状态为“NotCached”,“Caching”和“Cached”的标志。 请注意,如果两个请求完全同时完成,则可能会出现并发问题。 如果没有缓存,则启动该过程并将标志设置为“缓存”。在您进行缓存时,您可以决定如何处理其他即将发出的请求。使用线程休眠(我不建议)或转到数据库,但不要再次缓存。 当第一个请求完成缓存时,您将标志设置为缓存并完成工作。 如果您正在使用其他技术,则可以将请求排队,而缓存过程只能使用一个。 如果您提供更多详细信息,将有助于分析您的方案。