Asp.Net Core 实现异步操作锁 (SemaphoreSlim)

yufei       1 月 前       73

百度了很多东西,比如 Asp.Net 锁Asp.Net Core 锁Asp.Net lockAsp.Net Core Lock 都没得到我想要的。

到底是 Asp.Net Core 中没法实现锁还是我的方式不对呢?

哈哈,答案显而易见的,是我的方式不对!!!

但是,我也不知道自己是怎么找到 SemaphoreSlim 这个东西的,使用方法很简单

//设置同时访问线程最大数量
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 才能执行后面的代码

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.