Named Mutex with await

后端 未结 5 2140
感动是毒
感动是毒 2020-11-30 09:56

Hence I can\'t use thread-affine locks with async - how can I guard my resources when running multiple processes?

For example I\'ve two processes that u

5条回答
  •  盖世英雄少女心
    2020-11-30 10:38

    This guard works with async/await perfectly:

    public sealed class AsyncLock : IDisposable
    {
        readonly AutoResetEvent Value;
    
        public AsyncLock(AutoResetEvent value, int milliseconds = Timeout.Infinite)
        {
            if (value == null)
                throw new ArgumentNullException("value");
    
            value.WaitOne(milliseconds);
            Value = value;
        }
    
        void IDisposable.Dispose()
        {
            Value.Set();
        }
    }
    
    private async Task TestProc()
    {
        var guard = new AutoResetEvent(true); // Guard for resource
    
        using (new AsyncLock(guard)) // Lock resource
        {
            await ProcessNewClientOrders(); // Use resource
        } // Unlock resource
    }
    

提交回复
热议问题