






















异步限流器实现,实现一个AsyncThrottle类,支持最高并行数为N,超过的部分进入队列等待,支持取消操作和异常处理。
考察点:SemaphoreSlim的使用、异常处理(finally释放信号量)、CancellationToken的传播、资源泄漏预防。
public class AsyncThrottle { // 信号量控制并发数 private readonly SemaphoreSlim _semaphore; public AsyncThrottle(int maxParallelism) { if (maxParallelism <= 0) throw new ArgumentOutOfRangeException(nameof(maxParallelism), "并行数必须大于0"); _semaphore = new SemaphoreSlim(maxParallelism); } // 执行异步操作,支持取消 public async Task ExecuteAsync(Func<Task> action, CancellationToken ct = default) { // 等待信号量,支持取消 await _semaphore.WaitAsync(ct); try { // 执行异步操作 await action(); } finally { // 释放信号量,避免泄漏 _semaphore.Release(); } } // 重载:支持有返回值的异步操作 public async Task<TResult> ExecuteAsync<TResult>(Func<Task<TResult>> action, CancellationToken ct = default) { await _semaphore.WaitAsync(ct); try { return await action(); } finally { _semaphore.Release(); } } }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。