Лучший способ реализовать логику повторения с продолжительностью в C#

Я попытался создать логику повторных попыток, которая имеет ограничение по времени, скажем, 6 секунд с количеством повторов 6 раз (включая первую попытку), и если повторная попытка не удалась до 1 секунды, она будет спать до конца секунды и пробует запрос только в следующую секунду. Я не знаю, есть ли лучший способ достичь этого, кроме приведенного ниже.

Что я пробовал

  public bool RetryFunc(Func<Response,bool> function, DataModel data)
    {
        int duration=6; //in seconds
        int retryCount=5; 
        bool success = false;
        Stopwatch totalRetryDurationWatch = new Stopwatch();// begin request
        totalRetryDurationWatch.Start();// first try
        success = function(data);
        int count = 1;
        while (!success && count <= retryCount)
        {
            Stopwatch thisRetryDurationWatch = new Stopwatch();// Begining of this retry
            thisRetryDurationWatch.Start();
            success = function(data);//End this retry
            thisRetryDurationWatch.Stop();
            if (totalRetryDurationWatch.Elapsed.Seconds>=duration)
            {
                return false;
            }
            else if (!success) {
   // To wait for the second to complete before starting another retry
                if (thisRetryDurationWatch.ElapsedMilliseconds < 1000) 
                    System.Threading.Thread.Sleep((int)(1000 - thisRetryDurationWatch.ElapsedMilliseconds));
            }
            count++;
        }
        totalRetryDurationWatch.Stop();//To end the retry time duration watch
        return success;
    }

Любая помощь высоко ценится, спасибо.

0 ответов

Другие вопросы по тегам