Asp.Net Core 实现异步操作锁
/设置同时访问线程最大数量
static SemaphoreSlim _semaphore = new SemaphoreSlim(4);
static void AccessDatabase(string name, int seconds)
{
Console.WriteLine($"{name} waits to access a database");
_semaphore.Wait();
Console.WriteLine($"{name} was granted an access to a database");
Thread.Sleep(TimeSpan.FromSeconds(seconds));
Console.WriteLine($"{name} is completed");
_semaphore.Release();
}
static void Main(string[] args)
{
for (int i = 1; i < 6; i++)
{
string threadName = $"Thread{i}";
int secondsToWait = 2 + 2 * i;
var t = new Thread(() => AccessDatabase(threadName, secondsToWait));
t.Start();
}
}
----------------------------------------
上面的代码 new 了一个 SemaphoreSlim 对象,设置访问线程最大数量为 4,开启 5 个线程,发现,
线程 5 一开始一直处于等待状态,直到线程 1 完成了,调用了 _semaphore.Release() 释放,线程 5 才能执行后面的代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架