我的情况是我有多个异步Windows服务。 所有人都在使用一张桌子"乔布斯"。让我们用两列来说:" Id"和#34;加载"
在此表中有50个工作 我现在想要的是,这项服务每次只有10个工作并且可以使用它们。
但是,作业不会被处理两次非常重要。 这些服务只能抓住“加载”的工作岗位。是空的。
如果现在"服务A"来加载前10个工作岗位" Loaded"是null可能需要5秒。 并在这5秒内。 "服务B"来,并加载10个工作,这个工作将是相同的。 (危险!)
为了避免双重处理的作业,我现在要做的是加载10个作业并在一个语句中更新它们("加载"到DateTime.UtcNow)或更新它们并加载受影响的作业在一个声明中。
但我不知道这是否可行。 有人能帮助我吗?
亲切的问候
答案 0 :(得分:0)
我认为你可以做这样的事情
list.Where(j => j.Loaded == null).Take(10).AsEnumerable()
.Select(x =>
{
x.Loaded = DateTime.UtcNow;
db.SaveChanges();
return x;
})
.ToList().ForEach(j => //proccess job here);
答案 1 :(得分:0)
您遇到并发数据库访问问题。您的目的是更新使用标志读取的每个作业,以便不再处理它。想到两个想法: