常用的操作有同步锁和异步锁,RsCode中使用如下:
异步锁
AsyncLock m=new AsyncLock();
using (await m.LockAsync())
{
//protected code
}
同步锁
using ( new AsyncLock().Lock())
{
//protected code
}
AsyncLock 第一个参数:初始任务数,第二个参数:最多任务数,默认值都为1
使用第三方库 Nito.AsyncEx
进行异步锁
using Nito.AsyncEx;
public async Task test()
{
AsyncLock _mutex = new AsyncLock();
using (await _mutex.LockAsync())
{
//async ...
}
}
SemaphoreSlim
控制多线程对指定资源的访问,它的构造函数SemaphoreSlim(int initialCount)用于设置线程的数量,Wait()方法用于阻塞其中多余数量(例如代码中的3个线程)的线程,当线程数量在允许的范围内时此线程可以进入指定的代码,否则不能进入;Release()方法用于当线程执行完后释放资源,释放后下一个线程则可以进入此部分的代码;
SemaphoreSlim semaphoreSlim=new SemaphoreSlim(3);
try
{
semaphoreSlim.Wait();
}
finally
{
semaphoreSlim.Release();
}
© 2022 rscode.cn MIT license