123456789
private int _value;private readonly object locker = new object();private void Increment(){ lock (locker) { _value += 1; }}
1234567891011121314151617181920
private int _value;private readonly SemaphoreSlim slim = new SemaphoreSlim(1);public async Task DelayAndIncrementAsync(){ await slim.WaitAsync(); try { var oldValue = _value; await Task.Delay(TimeSpan.FromSeconds(5)); _value = oldValue + 1; } catch (Exception) { throw; } finally { slim.Release(); }}