1
我有一些(实体框架4)代码,看起来像这样:从数据库处理队列时替代系统范围的互斥?
class QueueItem{
public bool Processed { get; set; }
// ... other fields
}
class QueueContext: System.Data.Entity.DbContext
{
public System.Data.Entity.DbSet<QueueItem> Queue { get; set; }
public void ProcessItems()
{
do
{
var item = Queue.FirstOrDefault(q => !q.Processed);
if(item == null) break;
ProcessItem(item);
item.Processed = true;
SaveChanges();
} while(true);
}
//...
}
我想改变它是多线程的外部ProcessItems方法。实际上,我希望多个进程/应用程序域同时运行此代码。如何让多个进程从队列中选取相同的项目?我可以使用全系统(有名)的互斥锁,但我已经看到这些速度非常慢。我正在寻找某种原子“拉动并标记为正在进行中”。我使用SqlServerCE4作为数据存储。