主题。WebApi中有一个方法
public string Get()
{
using(ApplicationContext db = new ApplicationContext())
{
var Domain = db.Domain.Where(x => x.TryChek == null).Where(b => b.InProgress == null).FirstOrDefault();
Domain.InProgress = true;
db.SaveChanges();
Console.WriteLine("Выдали " + Domain.Name);
return JsonSerializer.Serialize(Domain);
}
}
按照计划,该方法应该从数据库中选择第一个匹配过滤器的对象,设置这个对象temp.InProgress = true来保存并返回它。而且更多这个想法上的对象不应该被选择。
但是在控制台中,我看到一个对象是如何多次发出的,从 2 次到 8 次。
我假设该对象没有时间保存,而另一个线程占用了它。试过包装lock,没有帮助。怎么修?
最简单同时也是最慢的选项,如果您同时运行 2 个或更多服务器(进程)则不考虑该选项。
您可以捕获静态对象上的监视器,即存在于单个实例中并在线程之间共享的对象。
示例(我从头开始写,我不保证编译):