The locker in C#
2017-02-20 13:31:00

同步锁

1
2
3
4
5
6
7
8
9
private int _value;
private readonly object locker = new object();
private void Increment()
{
lock (locker)
{
_value += 1;
}
}

异步锁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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();
}
}

区别

  1. 同步锁中不能使用异步操作
Prev
2017-02-20 13:31:00
Next