【发布时间】:2019-08-29 09:59:05
【问题描述】:
假设我有一个 SemaphoreSlim 限制对外部 API 的并发调用,如下所示:
private static readonly SemaphoreSlim semaphoreSlim = new SemaphoreSlim(10);
public async Task<HttpResponseMessage> SendApiRequest(HttpRequestMessage request)
{
using (await semaphoreSlim.WaitAsync())
return await SendRequestToAPI(request);
}
如果对 API 的调用次数是这样的,即没有长时间累积等待的调用者,但始终有至少两个调用者在等待,是否保证最终让所有调用者通过?或者当另一个调用者释放信号量时,一个请求可能是“不幸的”并且永远不会被选中进入?
【问题讨论】:
-
如果您对 为什么
SemaphoreSlim(和其他同步原语)不“公平”感兴趣,have a read of this article by Joe Duffy。 -
你错过了一个释放的电话......所以你的电话一定会永远等待
标签: c# .net async-await locking semaphore