首页 新闻 会员 周边 捐助

c# async 和lock 的问题

0
悬赏园豆:30 [已解决问题] 解决于 2017-04-20 17:15

private static object locker = new object();

public async Task<ResponseInfo> Test()
{
    lock(locker)
    {
        //判断是否存在(同步方法)
        //...........
        //插入数据(同步方法)   
        //.............
    }
}

并发时请求时,还会插入2条重复的, 之前测试中不加lock会很容易出现重复数据,加了之后偶尔还是会出现,哪位大神解释下为什么?

嘿嘿果宝的主页 嘿嘿果宝 | 初学一级 | 园豆:32
提问于:2017-04-20 14:26
< >
分享
最佳答案
0

了半天原因,原来是我们服务器是集群的,lock锁住的对象就无效了

嘿嘿果宝 | 初学一级 |园豆:32 | 2017-04-20 17:14
其他回答(2)
0

当出现并发时,有可能加锁去锁数据时,这个时候极有可能二者同时进入了锁里面,你可以在下面再加一把锁这样就有了足够的保证!

收获园豆:10
Jeffcky | 园豆:2789 (老鸟四级) | 2017-04-20 14:42

"这个时候极有可能二者同时进入了锁里面",那这个锁是假的吗(哭笑不得),为啥锁了 还能同时进去锁里面

支持(0) 反对(0) 嘿嘿果宝 | 园豆:32 (初学一级) | 2017-04-20 14:58
0

lock本身没问题,检查你的所谓判断方法

其次,你这明显的就是同步操作,为什么还要async?不要为了async而async,这个不光得不到任何好处,而且相反性能相对普通方法也没任何优势。

收获园豆:20
Daniel Cai | 园豆:10424 (专家六级) | 2017-04-20 16:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册