C# 異步鎖 await async鎖,lock,Monitor,SemaphoreSlim


異步方法內無法使用Monitor 和lock
所以只能用System.Threading.SemaphoreSlim了

            //Semaphore (int initialCount, int maximumCount); //initialCount代表還分配幾個線程,比如是1,那就是還能允許一個線程繼續跑鎖起來的代碼 //maximumCount代表最大允許數,比如是1,那就是進去1個線程,就會鎖起來 System.Threading.SemaphoreSlim slimlock = new SemaphoreSlim(1, 1); await slimlock.WaitAsync(); try { await Task.Delay(3000); } finally { slimlock.Release(); } 

而Monitor和lock只能用在非異步上面

//1.Monitor object lockObject= new object(); bool acquiredLock = false; try { Monitor.TryEnter(lockObject, ref acquiredLock); if (acquiredLock) { // Code that accesses resources that are protected by the lock. } else { // Code to deal with the fact that the lock was not acquired. } } finally { if (acquiredLock) { Monitor.Exit(lockObject); } } //2.Monitor lock //Monitor try { Monitor.Enter(lockObject); // Code that accesses resources that are protected by the lock. } finally { Monitor.Exit(lockObject); } //lock: lock(lockObject) { //Code that accesses resources that are protected by the lock. } 

上述2兩個加鎖的例子完全是等價的,都是在非異步的時候鎖定某段代碼



作者:牧場小明
鏈接:https://www.jianshu.com/p/1609c50279ac
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM