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


    背景

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

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

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

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

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

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

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

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

    伪代码示例

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

    备注

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

  • 相关阅读:
    洛谷 P1080 [NOIP2012 提高组] 国王游戏
    洛谷 P4370 [Code+#4]组合数问题2
    洛谷 P4369 [Code+#4]组合数问题
    洛谷 P3311 [SDOI2014] 数数
    implicit关键字详解
    模式匹配
    option[T]、Any、Nothing、Null类型的介绍
    高阶函数
    函数的介绍
    集合
  • 原文地址:https://www.cnblogs.com/happyframework/p/3268367.html
Copyright © 2020-2023  润新知