アプリにリクエストスロットリングを実装しました。これは、MemoryCacheを使用し、制限に従ってアイテムを期限切れにすることに基づいています。基本的に、私はキャッシュアイテムを取得しようとします。キャッシュアイテムがない場合は、先に進んでリクエストを行います。キャッシュアイテムの場合は、最後のリクエストを確認し、次にリクエストできる時間にワークアウトします。私の問題は、リクエストを待つ必要があるときにあります。
//This is a shortened version of what im doing, but the includes the required code
public void ThrottleRequest(string webservice)
{
if (cache.TryGet(webservice))
{
var timeToWait = GetTimeToWaitFromSomewhere();
Wait(timeToWait);
}
}
public async void Wait(TimeSpan timeToWait)
{
await Task.Delay(timeToWait); //This doesnt work
Thread.Sleep(timeToWait); //This works
}
問題はwaitメソッドにあります。thread.sleep番号を使用すると、番号が一致し、リクエストが正しく調整されます(つまり、1秒あたり1リクエスト)が、本番環境ではこれを使用したくありません。では、ここで非同期的に待つ正しい方法は何ですか?APIなどを誤用していますか?