如何在 .NET 6 API 中实现资源的独占锁定?

问题描述 投票:0回答:1

我有一个.NET 6 API端点,它创建很少的独立资源并修改共享资源,但是每当有并发HTTP请求时,API在修改共享资源时面临竞争条件,导致意外结果,共享资源是外部资源我无法控制,在应用程序/API 级别锁定此资源并使并发请求等待锁定释放的最佳方法是什么?

PS:我没有定义任何显式的多线程;将其视为一个普通的 .NET 6 API,带有一堆创建/修改资源的异步等待方法

c# async-await locking asp.net-core-webapi .net-6.0
1个回答
2
投票

如果“共享资源”在应用程序实例内共享,那么您可以使用

SemaphoreSlim
进行互斥。当你的代码进入其临界区时,它会执行一个
await semaphore.WaitAsync();
;当它退出其临界区时,它会执行一个
semaphore.Release();
(通常在
finally
内)。

如果“共享资源”是外部的,即在多个应用程序实例之间共享,那么您需要使用 CosmosDb 或 Redis 等构建分布式租赁系统。

© www.soinside.com 2019 - 2024. All rights reserved.