【发布时间】:2011-01-07 16:07:35
【问题描述】:
想象一下带有一些内存缓存的最简单的数据库访问代码 -
if exists in cache
return object
else
get from DB
add to cache
return object
现在,如果数据库访问需要一秒钟,并且我有 5 个 ASP.Net 请求/线程在那一秒钟内访问相同的代码,我如何确保数据库只调用第一个?我在它周围有一个简单的线程锁,但这只是将它们以有序的方式排队,允许每个人依次调用数据库。我的数据存储库基本上一次读取整个表,所以我们不是在谈论 Get by Id 数据请求。
关于如何做到这一点的任何想法?线程等待句柄听起来几乎是我所追求的,但我不知道如何编码。
这肯定是常见的情况?
现有伪代码:
lock (threadLock)
{
get collection of entities using Fluent NHib
add collection to cache
}
谢谢, 列
【问题讨论】:
标签: c# multithreading