我正在用 C# 构建一个 ASP.NET (.NET Framework) 应用程序,我正在对名为“LinuxDocker”的后端服务进行 API 调用,并且我试图限制 ASP.NET 应用程序对其进行的 12 个并发调用的数量。这是我写的代码:
private static Semaphore LinuxDockerSemaphore = new Semaphore(12, 12);
public static SemaphoreWaiter WaitForLinuxDocker(int timeoutMS = -1)
{
return new SemaphoreWaiter(LinuxDockerSemaphore, timeoutMS);
}
public class SemaphoreWaiter : IDisposable
{
Semaphore Slim;
public SemaphoreWaiter(Semaphore slim, int timeoutMS = -1)
{
Slim = slim;
Slim.WaitOne(timeoutMS);
}
public void Dispose()
{
Slim.Release();
}
}
然后,当我调用后端服务时,我会这样做:
using (ConcurrencyManager.WaitForLinuxDocker())
{
// Call backend service here
}
所以看起来这应该限制为 12 个并发调用,但是当我通过 100 个并发调用的集成测试来测试它时,它基本上一次只允许 1 个请求通过,而不是一次 12 个调用通过。
该服务在 Windows Server 2016 和 .NET Framework 4.7 上的 IIS 上运行。
我已经多次阅读这段代码,但不明白为什么它不起作用。
任何帮助将不胜感激。
Qyouu
相关分类