ASP.NET Core 3.x 中如何实现并发限制的代码示例?详细剖析与疑问解答!
- 技术教程
- 2025-12-26
- 4939
在ASP.NET Core 3.x中,控制并发请求是一个常见的需求,尤其是在高流量的Web应用中,以下是如何实现并发限制的详细步骤和代码示例。
使用中间件限制并发
ASP.NET Core 提供了一种简单的方式来限制应用程序的并发请求,我们可以通过创建一个自定义中间件来实现这一功能。

1 创建自定义中间件
我们需要创建一个自定义中间件类,这个类将继承自 IMiddleware 接口。
public class ConcurrencyLimitMiddleware { private readonly RequestDelegate _next; private readonly SemaphoreSlim _semaphore; public ConcurrencyLimitMiddleware(RequestDelegate next, int maxConcurrentRequests) { _next = next; _semaphore = new SemaphoreSlim(maxConcurrentRequests); } public async Task InvokeAsync(HttpContext context) { await _semaphore.WaitAsync(); try { await _next(context); } finally { _semaphore.Release(); } } }
2 配置中间件
在 Startup.cs 文件中,我们需要注册并配置这个中间件。
public void ConfigureServices(IServiceCollection services) { // 其他服务配置... services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); // 配置并发限制中间件 int maxConcurrentRequests = 10; // 设置最大并发请求数 app.UseMiddleware<ConcurrencyLimitMiddleware>(maxConcurrentRequests); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
使用分布式锁
如果需要跨多个进程或服务器限制并发,可以使用分布式锁来实现。

1 使用Redis作为分布式锁
确保你的系统中已经安装了Redis,并且它正在运行。
2 创建分布式锁中间件
public class DistributedLockMiddleware { private readonly RequestDelegate _next; private readonly IDistributedLock _lock; public DistributedLockMiddleware(RequestDelegate next, IDistributedLock lockProvider) { _next = next; _lock = lockProvider; } public async Task InvokeAsync(HttpContext context) { var lockKey = "ConcurrencyLock"; using (await _lock.LockAsync(lockKey)) { await _next(context); } } }
3 配置分布式锁中间件
在 Startup.cs 中,配置分布式锁中间件。

public void ConfigureServices(IServiceCollection services) { // 其他服务配置... services.AddStackExchangeRedisCache(options => { options.Configuration = "localhost:6379"; options.InstanceName = "SampleInstance"; }); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他配置... // 配置分布式锁中间件 app.UseMiddleware<DistributedLockMiddleware>(); // 其他配置... }
FAQs
Q1: 如何调整并发限制的值?
A1: 你可以通过修改 maxConcurrentRequests 的值来调整并发限制,这个值应该在 Startup.cs 中配置中间件时设置。
Q2: 分布式锁如何保证线程安全?
A2: 分布式锁通过在Redis中创建一个唯一的锁键,并使用 LockAsync 方法来确保在同一时间只有一个请求能够获取到锁,当请求完成时,锁会被自动释放,从而保证线程安全。