private static object locker = new object();
public async Task<ResponseInfo> Test() { lock(locker) { //判断是否存在(同步方法) //........... //插入数据(同步方法) //............. } }
并发时请求时,还会插入2条重复的, 之前测试中不加lock会很容易出现重复数据,加了之后偶尔还是会出现,哪位大神解释下为什么?
找了半天原因,原来是我们服务器是集群的,lock锁住的对象就无效了
当出现并发时,有可能加锁去锁数据时,这个时候极有可能二者同时进入了锁里面,你可以在下面再加一把锁这样就有了足够的保证!
"这个时候极有可能二者同时进入了锁里面",那这个锁是假的吗(哭笑不得),为啥锁了 还能同时进去锁里面
lock本身没问题,检查你的所谓判断方法
其次,你这明显的就是同步操作,为什么还要async?不要为了async而async,这个不光得不到任何好处,而且相反性能相对普通方法也没任何优势。