【发布时间】:2016-03-09 11:04:34
【问题描述】:
我正在尝试实施以下方案,但无法提出解决方案。
在我的网络服务中,我根据会话 ID 缓存了对象(包含静态数据)。收到请求后,它会检查缓存是否包含会话 ID 的任何键。
- 如果不可用,它将从数据库中加载并存储在缓存中。
- 如果可用,它会使用该缓存并继续进行进一步处理。
现在,在此服务中启用了多线程,并且当多个请求(具有相同会话 ID)被发送到服务时,它们都试图将数据加载到缓存中,因为它们最初都没有找到该键。
问题是:我想停止所有其他线程,直到第一个线程将静态数据加载到缓存中,一旦第一个线程完成将数据加载到缓存中,其他线程应该使用该缓存而不是再次尝试加载。
看起来微不足道,但不知何故无法想到任何可以解决此问题的多线程功能。
我的代码如下所示:
somemethod()
{
if(cache.Contains(someKey)
{
// use cache and do further processing
}
else
{
cache.add(someKey)
}
}
【问题讨论】:
标签: c# multithreading wcf caching race-condition