首页 > 编程语言 >【转】[C#] WebAPI 防止并发调用二(更多)

【转】[C#] WebAPI 防止并发调用二(更多)

时间:2024-09-19 14:01:28浏览次数:12  
标签:WebAPI readerWriterLock Monitor C# private 并发 线程 new public

转自:阿里的 通义灵码

接上篇:https://www.cnblogs.com/z5337/p/18181574

在 C# 中防止接口的并发访问(即确保同一时间内只有一个线程能够访问某个资源或方法),可以通过多种方式实现。这里列出一些常见的方法:

1. 使用 lock 语句

lock 是一种常用的同步原语,用于保护对共享资源的访问。它会获取一个对象的互斥锁,在释放锁之前阻止其他线程获取同一个锁。

private readonly object _lockObject = new object();

public void SafeMethod()
{
    lock (_lockObject)
    {
        // 这里是临界区,一次只有一个线程能进入
        // 执行你的业务逻辑
    }
}

2. 使用 Monitor 类

Monitor 类提供了比 lock 更加灵活的控制,包括等待条件、超时等。

private readonly object _monitorLock = new object();

public void SafeMethod()
{
    Monitor.Enter(_monitorLock);
    try
    {
        // 执行业务逻辑
    }
    finally
    {
        Monitor.Exit(_monitorLock);
    }
}

3. 使用 Semaphore 或 SemaphoreSlim

信号量可以用来限制同时访问某个资源的线程数量。

private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);

public async Task SafeAsyncMethod()
{
    await _semaphore.WaitAsync();
    try
    {
        // 执行业务逻辑
    }
    finally
    {
        _semaphore.Release();
    }
}

4. 使用 async/await 和线程安全集合

如果你的方法是异步的,并且需要访问集合,可以考虑使用线程安全的集合,如 ConcurrentBagConcurrentQueueConcurrentStack 等。

private readonly ConcurrentBag<int> _threadSafeCollection = new ConcurrentBag<int>();

public async Task SafeAsyncMethod()
{
    // 添加元素
    _threadSafeCollection.Add(1);
    
    // 获取元素
    int value;
    _threadSafeCollection.TryTake(out value);
}

5. 使用 ReaderWriterLockSlim

当你有多个读取者但很少有写入者时,ReaderWriterLockSlim 允许多个读取者同时访问资源,但不允许写入者和其他读取者同时访问。

private readonly ReaderWriterLockSlim _readerWriterLock = new ReaderWriterLockSlim();

public void SafeReadMethod()
{
    _readerWriterLock.EnterReadLock();
    try
    {
        // 读取操作
    }
    finally
    {
        _readerWriterLock.ExitReadLock();
    }
}

public void SafeWriteMethod()
{
    _readerWriterLock.EnterWriteLock();
    try
    {
        // 写入操作
    }
    finally
    {
        _readerWriterLock.ExitWriteLock();
    }
}

选择哪种方法取决于你的具体需求和场景。例如,如果你的应用程序主要是异步的,那么使用 SemaphoreSlim 或 async/await 结合线程安全集合可能是更好的选择。如果你的应用程序是同步的,那么 lock 或 Monitor 可能就足够了。而对于读多写少的场景,ReaderWriterLockSlim 则是一个不错的选择。

标签:WebAPI,readerWriterLock,Monitor,C#,private,并发,线程,new,public
From: https://www.cnblogs.com/z5337/p/18420462

相关文章

  • 4路同步AD模拟量采集卡800K采样频率—PCIe9757
    阿尔泰科技概述:信息社会的发展,在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息与信号处理技术的整个面貌,而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键性、乃至决定性的作用,其应用已经深入到信号处理的各个领域......
  • 阿里云服务器手动部署LNMP环境(Alibaba Cloud Linux 3/2、CentOS 7/8)
    LNMP是目前主流的网站服务器架构之一,适合运行大型和高并发的网站应用,例如电子商务网站、社交网络、内容管理系统等。LNMP分别代表Linux、Nginx、MySQL和PHP。本文介绍如何在AlibabaCloudLinux3/2、CentOS7/8操作系统的ECS实例上搭建LNMP环境。部署环境的实例要求手动部署LNMP环......
  • 阿里云服务器ECS适用于那些场景?
    云服务器ECS具有广泛的应用场景,既可以作为Web服务器或者应用服务器单独使用,又可以与其他阿里云服务集成提供丰富的解决方案。说明云服务器ECS的典型应用场景包括但不限于本文描述,您可以在使用云服务器ECS的同时发现云计算带来的技术红利。网站应用网站初始阶段访问量小,只需要一台低......
  • 使用 Docker 安装 TensorFlow 并设置 GPU/CPU 支持
    GPU云服务器(CloudGPUService)是基于GPU的快速、稳定、弹性的计算服务,主要应用于深度学习训练/推理、图形图像处理以及科学计算等场景。GPU云服务器提供和标准CVM云服务器一致的方便快捷的管理方式。GPU云服务器通过其强大的快速处理海量数据的计算性能,有效解放用户的计算......
  • NS2582 同步升压双节锂电池充电管理IC
    1特性●最大2A输出同步开关型升压充电器●升压效率可高达90%以上●内置电池短路/涓流/恒流/恒压模式●±0.5%电池恒压模式电压精度●支持LED充电状态指示●支持充电电流外部可调●支持输入适配器DPM功能●外置EN使能关闭功能●电池恒压模式电压8.......
  • 9月京东云云服务器CVM价格配置表汇总-金秋上云!
    轻量云主机是面向中小企业、开发者打造的预装精选软件、开箱即用的主机产品,快速搭建网站、电商、企业低代码工具箱,云盘、共享文档、知识库、开发测试环境等,相对普通云主机,按套餐购买更优惠、控制台可视化管理,运维更简单,提供更便捷上云体验。轻量云主机这个专区是本次活动的主要专区......
  • Autosar模式管理实战系列-ECUM模块要点以及配置讲解2
    1.配置实战本节通过EcuM的Demo工程介绍EcuM的基本配置,Demo工程主要配置:Os的启动模式、EcuM初始化的函数、休眠模式、唤醒源。Os的启动模式配置成默认启动模式;初始化配置了BswM和Port和MCU示例,实际使用中需根据需求添加BSW模块和驱动模块的初始化函数;休眠模......
  • springcloud的ribbon懒加载负载均衡策略
    ribbon的默认是第一次调用的时候,才会去初始化负载均衡策略,那这个可能的后果就是服务第一次请求的是,因为需要初始化,有可能会慢一点那可以通过配置项目启动的时候,就进行初始化负载均衡策略,减少第一次请求时候的时间只需要再消费端的模块中添加如下配置:ribbon:eager-load:......
  • springcloud负载均衡组件ribbon使用
    一、微服务负载均衡ribbon策略如下:1、线性轮询策略:RoundRibbonRule 2、重试策略:RetryRule3、加权响应时间策略:WeightedResponseTimeRule4、随机策略:RandomRule5、最空闲策略:BestAvailableRule6、区域感知轮询策略:ZoneAvoidanceRule(默认)每个策略对应什么意思,基本也就是字......
  • 护目镜佩戴检测系统 Opencv
    护目镜佩戴检测系统利用摄像头和图像识别技术,护目镜佩戴检测系统实时监测工人的护目镜佩戴情况,护目镜佩戴检测系统通过拍摄工人的面部图像,并使用算法分析图像中的眼睛和护目镜位置,判断是否正确佩戴护目镜。护目镜佩戴检测系统能够实时监测工人的护目镜佩戴情况,护目镜佩戴检测系统及......