次のような(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を使用しています。