0

ユーザーが特定のアクションを実行すると、Web サービスへの呼び出し (取得) が行われます。このサービスでは、1 秒に 1 回を超える呼び出しは許可されません。Task.Delay を使用してこれを制御し、後続の呼び出しが少なくとも 1 秒間隔で行われるようにできると考えていましたが、期待どおりに機能していないようです。擬似コードは次のようになります。

public async void OnUserAction()
{
    var timeUntilPreviousCallWillBeOrWasMade = 1000ms - (Now - previousWaitStartTime);
    var timeToWaitBeforeThisCallShouldBeMade = Max(0, timeUntilPreviousCallWillBeOrWasMade + 1000ms);
    previousWaitStartTime = Now;
    await Task.Delay(timeToWaitBeforeThisCallShouldBeMade);
    MakeCallToWebService();
}

呼び出しと継続は同じスレッドで行われます (Environment.CurrentManagedThreadId によって報告されます)。問題は、このメソッドの呼び出しが立て続けに行われる場合、Web サービスへの呼び出し間の経過時間が 1 秒未満になることです。私はばかげた間違いをしたか、Task.Delay (または上記の両方) を完全に理解していません。ヒントはありますか?

4

2 に答える 2

-4

msdn でThread.Sleep (millisecondsTimeout) を使用できますか?

それを使うことをお勧めします。

于 2013-06-15T00:43:55.650 に答える