为什么async/await方法不能有lock或Monitor
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                为什么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的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: .Net Core with 微服务 -
- 下一篇: VS Code + ML.NET 玩转交
