한 스레드가 한 번에 하나의 스레드 만 호출하도록하고 싶습니다. 처음 스레드가 아직 실행 중일 때 이후 스레드를 삭제합니다. 생성자에서SemaphoreSlim을 통한 스레드 조절
await throttler.WaitAsync();
T result = default(T);
HttpResponseMessage response = await Client.Proxy.PostAsJsonAsync(path, request);
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<T>();
throttler.Release();
}
else
{
throttler.Release();
}
return result;
나는
throttler = new System.Threading.SemaphoreSlim(1, 1);
는 하나의 요청이 한 번에 서버로 전송되고 있습니다. 그러나 요청이 아직 실행중인 경우 나중의 모든 요청을 종료하려고합니다.
가 _ "이 SemaphoreSlim 클래스를 사용하여 얻을 수 있습니다"_ - 아마. 귀하의 질문에 좋은 [mcve]없이 말할 수 없으며 "할 수 있습니까?" 질문은 본질적으로 너무 광범위합니다. 하지만 초기 카운트가 1 인 세마포어를 사용하면 Wait (0)을 사용하여 즉시 세마포어를 획득 할 수 있습니다. 당신이 그것을 습득하지 못하면, 당신은 이미 그 작업이 실행 중이며 그것을 건너 뛸 수 있다는 것을 알게됩니다. 작업이 완료되었을 때 세마포어를 해제하려면'finally '를 사용하는 것을 잊지 마십시오. –