Я обычно использую цикл while, который продолжает пытаться выполнить некоторую операцию, пока либо операция не завершится успешно, либо не истечет время ожидания:
bool success = false
int elapsed = 0
while( ( !success ) && ( elapsed < 10000 ) )
{
Thread.sleep( 1000 );
elapsed += 1000;
success = ... some operation ...
}
Я знаю, что есть несколько способов реализовать это, но сутьв том, что я несколько раз пытался выполнить какую-либо операцию со сном до успеха или я спал слишком долго в совокупности.
Есть ли встроенный класс .net / метод / etc, чтобы спасти меня от переписывания этого шаблонаповсюду?Возможно, ввод - это Func (из bool) и время ожидания?
Редактировать
Спасибо всем, кто внес свой вклад.Я выбрал подход sleep (), потому что он был наименее сложным, и я полностью против сложности =) Вот мой (все еще нуждается в проверке) имплиментация:
public static bool RetryUntilSuccessOrTimeout( Func<bool> task , TimeSpan timeout , TimeSpan pause )
{
if ( pause.TotalMilliseconds < 0 )
{
throw new ArgumentException( "pause must be >= 0 milliseconds" );
}
var stopwatch = Stopwatch.StartNew();
do
{
if ( task() ) { return true; }
Thread.Sleep( ( int )pause.TotalMilliseconds );
}
while ( stopwatch.Elapsed < timeout );
return false;
}