.net конструкция для цикла while с тайм-аутом

Я обычно использую цикл while, который продолжает попытки выполнения некоторой операции до тех пор, пока операция не завершится успешно, либо не истечет время ожидания:

bool success = false
int elapsed = 0
while( ( !success ) && ( elapsed < 10000 ) )
{
     Thread.sleep( 1000 );
     elapsed += 1000;
     success = ... some operation ...     
}

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

Есть ли встроенный класс / метод / и т. д., чтобы спасти меня от переписывания этот шаблон повсюду? Возможно, ввод - это 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;
    }
20
задан SFun28 8 July 2011 в 20:28
поделиться