Я бы не использовал "goto" - но вы можете написать небольшой вспомогательный метод. Например:
public static void TryMultiple<E>(Action action, int times) where E : Exception
{
E lastException = null;
for (int i = 0; i < times; i++)
{
try
{
action();
return; // Yay, success!
}
catch (E exception)
{
// Possibly log?
lastException = exception;
}
}
throw new RetryFailedException("Retry failed " + times + " times",
lastException);
}
Это всего лишь набросок решения - вам нужно соответствующим образом адаптировать его. В любом случае, это, в основном, позволяет вам повторять попытки перед лицом частично принятого исключения многократно. Вы, вероятно, будете использовать лямбда-выражение для выражения действия или иногда просто группу методов для одного вызова метода:
TryMultiple<MyConcurrencyException>(myDB.doOptimisticConcurrency, 5);