为什么async/await方法不能有lock或Monitor

        相信有不少朋友知道async/await有lock语法的情况一般都会编译错误,这个时候可以通过Monitor来解决编译错误的问题;虽然这样解决的编译错误但本质问题还是没有解决。

        其实并不是async/await方法不能用lock或Monitor,而是在lock或Monitor的作用域内是不能使用awaiter功能。最主要原因是await后面代码执行线程非常大的机率不是Monitor.Enter线程,所以在执行Monitor.Exit的是会异常的。lock或Monitor要求锁和解锁对象时都必须是同一线程处理,而await其实只是个异步状态机,它后面的代码触发线程是异常步回调线程,所以是无法释放对象锁的。

        但有时候个别async/await需要同步执行怎办?那可以使用线程信号量来解决。通过SemaphoreSlim对象可以方便解决方法同步运行问题,详细可查看

https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.semaphoreslim?view=net-5.0

BeetleX

开源跨平台通讯框架(支持TLS)
提供高性能服务和大数据处理解决方案

https://beetlex.io

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值