zoukankan      html  css  js  c++  java
  • .NET:遇到并发问题,什么样的情况下需要自动重试?

    背景

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

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

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

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

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

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

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

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

    伪代码示例

    复制代码
     1 private void Do()
     2 {
     3     try
     4     {
     5         //执行业务逻辑
     6     }
     7     catch(并发异常 ex)
     8     {
     9         清空状态()
    10         Do()
    11     }
    12 }
    复制代码
  • 相关阅读:
    02-模板字符串
    01-学习vue前的准备工作
    21-z-index
    20-定位
    19-background
    18-超链接导航栏案例
    17-文本属性和字体属性
    16-margin的用法
    jBPM
    Table of Contents
  • 原文地址:https://www.cnblogs.com/wht123/p/14245293.html
Copyright © 2011-2022 走看看