c#中lock的使用(用于预约超出限额的流程)

简介:

一个项目,预约系统,核心二张表:预约表,预约限额表

用户点击预约按钮后,

1. 先select 预约限额表把该预约时间段的限额取出来, 

2. 再select 预约表把该预约时间已经预约上的次数算出来

3. 第一步减第二步,得到是否还能进行预约,大于0就可以预约了

4. 第三步里大于0的话就insert 预约表

之前的代码都是用ado.net+sql语句执行的,然后在正式运行的时候,每天18点可以进行预约,然后我设置了某一时间段是可以预约1个,

结果在18点的时候N个人点了预约,导致计算出预约数后想插入之前,另一个人又来计算预约数了,导致超出限额了

问了下网友,给了三种解决方案:

1. redis

2. c#里的lock

3. c#里的ConcurrentQueue


自己 测试了一下,用第二种 ,成功了,

success1.png

success2.png

success3.png


第三种的话网友也给了个示例:

%E9%A2%84%E7%BA%A6%E5%B9%B6%E5%8F%91%E5%

%E9%A2%84%E7%BA%A6%E5%B9%B6%E5%8F%91%E5%

%E9%A2%84%E7%BA%A6%E5%B9%B6%E5%8F%91%E5%

目录
相关文章
|
2月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
2月前
|
存储 安全 C#
C#全新一代医院手术麻醉系统围术期全流程源码
手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字化,自动生成麻醉的各种医疗文书,完成共享HIS、LIS、PACS和 EMR等手术患者信息,从而提高麻醉、手术工作的管理水平。
14 2
|
11月前
|
C# 容器
【C#本质论 四】操作符和控制流程
【C#本质论 四】操作符和控制流程
57 0
【C#本质论 四】操作符和控制流程
|
11月前
|
存储 前端开发 C#
【C#编程最佳实践 八】MVC流程实践
【C#编程最佳实践 八】MVC流程实践
58 0
【C#编程最佳实践 八】MVC流程实践
|
11月前
|
XML 存储 SQL
【C#编程最佳实践 五】项目与代码流程实践
【C#编程最佳实践 五】项目与代码流程实践
118 0
【C#编程最佳实践 五】项目与代码流程实践
|
存储 编译器 C#
|
存储 测试技术 C#
C#编程流程控制与集合类型(一)
C#编程流程控制与集合类型
C#编程流程控制与集合类型(一)
C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制
C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制
C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制
|
C# Windows
【C#】【平时作业】习题-4-流程控制
【C#】【平时作业】习题-4-流程控制
93 0
【C#】【平时作业】习题-4-流程控制
|
存储 开发框架 Java
【CLR C#】浅谈.Net的GC(垃圾回收)机制及其整体流程
在.NET程序开发中,为了将开发人员从繁琐的内存管理中解脱出来,将更多的精力花费在业务逻辑上,CLR提供了自动执行垃圾回收的机制来进行内存管理,开发人员甚至感觉不到这一过程的存在。.NET程序可以找出某个时间点上哪些已分配的内存空间没有被程序使用,并自动释放它们。自动找出并释放不再使用的内存空间机制,就称为垃圾回收机制。本文主要介绍.Net中的GC(垃圾回收)机制及其整体流程。
【CLR C#】浅谈.Net的GC(垃圾回收)机制及其整体流程