.Net SemaphoreSlim( 二 )


例三中我使用了 await semaphore.WaitAsync();,也就是说不存在同步阻塞代码了,全部都是异步 。
异步下遇到await,执行等待 , 那么当前执行这个Task的线程可能会被“任务调度器拿去执行别的Task”
结论:1.在异步async/await情况下,SemaphoreSlim会限制正在执行访问资源的Task的数量 ,   与例二第二个结论一致 。
异步下的Lock锁鉴于SemaphoreSlim的特殊性,可以使用其通过程序角度来实现“锁”(叫乐观锁、还是悲观锁??? , 我去,两者好像都不是

.Net SemaphoreSlim

文章插图

乐观锁与悲观锁定义如下图
.Net SemaphoreSlim

文章插图
如下图代码:
重点代码  SemaphoreSlim _semaphore = new(1) 
如果真要说明,我觉得是最多像 悲观锁 ,但又不全是 。这里的SemaphoreSlim只是说同一时刻只准一个线程或正在执行的Task做保存操作,那么如果是分布式程序呢,另一个程序此时也执行保存操作?
我觉得其真实原因是:使用SemaphoreSlim可以实现异步下的 Lock 锁 。
.Net SemaphoreSlim

文章插图

.Net SemaphoreSlim

文章插图

.Net SemaphoreSlim

文章插图
【.Net SemaphoreSlim】

推荐阅读