Skip to content

常用的操作有同步锁和异步锁,RsCode中使用如下:

异步锁

csharp
AsyncLock m=new AsyncLock();
using (await m.LockAsync())
{
      //protected code
}

同步锁

csharp
using ( new AsyncLock().Lock())
{
      //protected code
}

AsyncLock 第一个参数:初始任务数,第二个参数:最多任务数,默认值都为1

使用第三方库 Nito.AsyncEx进行异步锁

csharp
using Nito.AsyncEx;

public async Task test()
{
    AsyncLock _mutex = new AsyncLock();
    using (await _mutex.LockAsync())
    {
        //async ...
    }
}

SemaphoreSlim

控制多线程对指定资源的访问,它的构造函数SemaphoreSlim(int initialCount)用于设置线程的数量,Wait()方法用于阻塞其中多余数量(例如代码中的3个线程)的线程,当线程数量在允许的范围内时此线程可以进入指定的代码,否则不能进入;Release()方法用于当线程执行完后释放资源,释放后下一个线程则可以进入此部分的代码;

csharp
SemaphoreSlim semaphoreSlim=new SemaphoreSlim(3);

try
{
  semaphoreSlim.Wait();
}
finally
{
	semaphoreSlim.Release();
}