我有一些(Entity Framework 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方法外部的多线程。实际上,我希望多个进程/ appDomains同时运行此代码。如何让多个进程从队列中挑选相同的项目?我可以使用系统范围(命名)互斥,但我看到那些非常慢。我正在寻找某种原子“拉动和标记正在进行中”。我正在使用SqlServerCE4作为数据存储。
答案 0 :(得分:3)
最好使用实际的消息队列,如MSMQ,Azure队列,甚至是Sql Server Service Broker(当然不适用于CE)。像Redis这样的东西也可能更容易。如果这些都不是一个选项,您可能需要执行以下操作: