.NET:遇到并发问题,什么样的情况下需要自动重试?

背景

多用户系统会出现并发问题,应对并发问题的两种方式是“悲观锁”和“乐观锁”,多数情况下都会采用“乐观锁”,这引发了一个问题,如果检查出乐观并发异常如何重试?是让最终用户手工重试?还是让系统自动重试?如何做出这个决策?本文就给我的一点想法。

想法虽小,记下来不容易忘。

何时选择:让最终用户手工重试

如果并发修改涉及的数据是用户直接参与修改的,就让用户手工重试。

注:因为用户重试一般是另外一个独立的请求,编程上比较容易处理,服务器只需要抛出并发异常即可。

何时选择:让系统自动重试

如果并发修改涉及的数据不是用户直接参与修改的,就让系统自动重试。

注:因为自动重试是在一个独立的请求,编程上需要注意一个问题:自动重试前必须重置上下文状态,如:修改的DbContext需要重置。

伪代码示例

 1 private void Do()
 2 {
 3     try
 4     {
 5         //执行业务逻辑
 6     }
 7     catch(并发异常 ex)
 8     {
 9         清空状态()
10         Do()
11     }
12 }

备注

还是那句话:想法虽小,记下来不容易忘。

原文地址:https://www.cnblogs.com/happyframework/p/3268367.html