Cześć, mam taką sytuację.
Mam metodę, która opakowuje fragment kodu w try..catch.
Wygląda to mniej więcej tak:
void DoAction(Action action, int tryCount = 0, int retrySleep = 0)
{
Exception lastException = null;
int tries = 0;
if (tryCount == 0)
tryCount = TRY_COUNT;
if (retrySleep == 0)
retrySleep = RETRY_SLEEP;
while (tries < tryCount)
{
try
{
action();
return;
}
catch (Exception ex)
{
if (ex.HResult == RPC_E_SERVERCALL_RETRYLATER || ex.HResult == RPC_E_CALL_REJECTED)
{
tries++;
System.Threading.Thread.Sleep(retrySleep);
lastException = ex;
}
else
throw;
}
}
throw lastException;
}
Generalnie, jeśli wystąpi pewien wyjątek, to wtedy powtarzam wykonanie kodu po pewnym czasie. I super, wszystko działa.
Tyle, że mam drugą metodę, która zwraca jakąś wartość. Jest identyczna. Poza tym, że w parametrze przyjmuje Func zamiast Action i zwraca rezultat.
Czy jest jakaś opcja, żeby zamiast tych dwóch metod zrobić jedną jakąś uniwersalną?