.NET:遇到并发问题,什么样的情况下需要自动重试?
2024-08-27 14:58:15
背景
多用户系统会出现并发问题,应对并发问题的两种方式是“悲观锁”和“乐观锁”,多数情况下都会采用“乐观锁”,这引发了一个问题,如果检查出乐观并发异常如何重试?是让最终用户手工重试?还是让系统自动重试?如何做出这个决策?本文就给我的一点想法。
想法虽小,记下来不容易忘。
何时选择:让最终用户手工重试
如果并发修改涉及的数据是用户直接参与修改的,就让用户手工重试。
注:因为用户重试一般是另外一个独立的请求,编程上比较容易处理,服务器只需要抛出并发异常即可。
何时选择:让系统自动重试
如果并发修改涉及的数据不是用户直接参与修改的,就让系统自动重试。
注:因为自动重试是在一个独立的请求,编程上需要注意一个问题:自动重试前必须重置上下文状态,如:修改的DbContext需要重置。
伪代码示例
private void Do()
{
try
{
//执行业务逻辑
}
catch(并发异常 ex)
{
清空状态()
Do()
}
}
备注
还是那句话:想法虽小,记下来不容易忘。
最新文章
- [LeetCode] Valid Anagram 验证变位词
- elasticsearch suggest 的几种使用-completion 的基本 使用
- ECharts+BaiduMap+HT for Web网络拓扑图应用
- 【leetcode】Reverse Words in a String
- HDU 1005 Number Sequence(数列)
- 二分图匹配(KM算法)n^4 分类: ACM TYPE 2014-10-04 11:36 88人阅读 评论(0) 收藏
- Android 自定义Toast,不使用系统Toast
- Unity UGUI —— 鼠标穿透UI问题(Unity官方的解决方法)
- myloader原理0
- Application.CommonAppDataPath的路径
- suse安装软件命令
- POJ1995 Raising Modulo Numbers(快速幂)
- hdu4135Co-prime 容斥原理水题
- iOS多线程总结(一)NSThread
- MySQL 的 phpmyadmin上传大小限制(转)以及 MySQL server has gone away 的解决办法
- (六)Jquery Mobile主题及插件的使用
- V6厂最新V4版本卡地亚蓝气球大号42mm男表|价格报价|
- 【Linux】Linux上安装Nginx
- 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.
- mysql 唯一索引与null.md