C# 異步鎖


  • 使用SemaphoreSlim 實現
    • 當多個任務或線程並行運行時,難以避免的對某些有限的資源進行並發的訪問。可以考慮使用信號量來進行這方面的控制(System.Threading.Semaphore)是表示一個Windows內核的信號量對象。如果預計等待的時間較短,可以考慮使用SemaphoreSlim,它則帶來的開銷更小。.NetFrameWork中的信號量通過跟蹤進入和離開的任務或線程來協調對資源的訪問。信號量需要知道資源的最大數量,當一個任務進入時,資源計數器會被減1,當計數器為0時,如果有任務訪問資源,它會被阻塞,直到有任務離開為止。
      如果需要有跨進程或AppDomain的同步時,可以考慮使用Semaphore。Semaphore是取得的Windows 內核的信號量,所以在整個系統中是有效的。它主要的接口是Release和WaitOne,使用的方式和SemaphoreSlim是一致的。
private static readonly SemaphoreSlim _mutex = new SemaphoreSlim(1);

        static int _value;

        public async static Task DelayAndIncrementAsync()
        {
            await _mutex.WaitAsync();
            try
            {
                var oldValue = _value;
                await Task.Delay(TimeSpan.FromSeconds(oldValue));
                Console.WriteLine(_value);
                _value = oldValue + 1;

            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }
            finally
            {

                _mutex.Release();
            }
        }


免責聲明!

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



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