C#Mutex类用法-发送验证码

参考文章:C#Mutex类用法总结
互斥锁创建以及优缺点
由于发送验证码为异步操作,避免用户在上一条验证码发送方法执行过程未结束时就又进入方法,所以在发送验证码时需要加上互斥锁Mutex

public async Task<CodeOutput> SendVerificationCode_Web(RegisterSendCodeInput input)
        {
            
            
            CodeOutput output = new CodeOutput();
            bool flag = false;
            using (Mutex mutex = new Mutex(true, input.PhoneNumber, out flag))  //互斥锁,针对单一用户
            {
                
                if (!flag)
                {
                    mutex.WaitOne(); //如果该手机号线程还没结束,则开始等待,此处可加上最长等待时间
                }
                if (!OneMinuteCheck("PhoneCaptcha", input.PhoneNumber))	//此处判断该手机号码为key的缓存是否存在以及时间是否过短
                {
                    output.CanSend = false;
                    return output;
                }
            
			//此处发送验证码并存入缓存
				//最后释放Mutex
				mutex.ReleaseMutex();
			}
               return output;
           
        }

注意:①如果不判断flag,第一次进入时就会进入等待,也就结束不了了
②如果不适用using,结束后一定要通过ReleaseMutex()方法释放掉当前mutex,否则后面进入的会一直处于等待的状态
③:不要在Mutex中执行过多的操作,否则跟单线程又有什么区别呢

出现问题:
使用using任然存在结束后未释放,原因不明。所在在内部使用mutex.ReleaseMutex()释放一边

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值