一度に1つのスレッドだけがサービスを呼び出し、最初のスレッドがまだ実行している間に後のものを破棄するようにします。コンストラクタで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'を使うのを忘れないでください。 –