欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/12/4 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 为什么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

总结

以上是生活随笔为你收集整理的为什么async/await方法不能有lock或Monitor的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。