背景

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

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

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

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

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

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

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

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

伪代码示例

 private void Do()
{
try
{
//执行业务逻辑
}
catch(并发异常 ex)
{
清空状态()
Do()
}
}

备注

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

最新文章

  1. [LeetCode] Valid Anagram 验证变位词
  2. elasticsearch suggest 的几种使用-completion 的基本 使用
  3. ECharts+BaiduMap+HT for Web网络拓扑图应用
  4. 【leetcode】Reverse Words in a String
  5. HDU 1005 Number Sequence(数列)
  6. 二分图匹配(KM算法)n^4 分类: ACM TYPE 2014-10-04 11:36 88人阅读 评论(0) 收藏
  7. Android 自定义Toast,不使用系统Toast
  8. Unity UGUI —— 鼠标穿透UI问题(Unity官方的解决方法)
  9. myloader原理0
  10. Application.CommonAppDataPath的路径
  11. suse安装软件命令
  12. POJ1995 Raising Modulo Numbers(快速幂)
  13. hdu4135Co-prime 容斥原理水题
  14. iOS多线程总结(一)NSThread
  15. MySQL 的 phpmyadmin上传大小限制(转)以及 MySQL server has gone away 的解决办法
  16. (六)Jquery Mobile主题及插件的使用
  17. V6厂最新V4版本卡地亚蓝气球大号42mm男表|价格报价|
  18. 【Linux】Linux上安装Nginx
  19. Descriptio Resource Path LocationType Archive for required library: 'D:/apache-maven/apache-maven-3.6.0/mavenrepository/org/springframework/spring-aspects/4.3.7.RELEASE/spring-aspects-4.3.7.RELEASE.
  20. mysql 唯一索引与null.md

热门文章

  1. IDEA 部署项目的时候出错:Jar not loaded错误
  2. jekyll安装及使用
  3. csu 1756(数论+去重)
  4. js基础练习(四)
  5. 常用开放api【长期更新】
  6. Java Language Keywords
  7. list 往指定的下标插入元素
  8. windows关闭aslr办法
  9. 提起Ajax请求的方式(POST)
  10. 【Python】闭包Closure