Лучший способ реализовать логику повторения с продолжительностью в 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;
}
Любая помощь высоко ценится, спасибо.