Sto scrivendo una routine che ha la seguente forma:
TRY A
IF no success, B
IF no success, RETRY A
IF no success, throw error
Non è banale estrarre A o B nella propria routine, quindi qual è la struttura più semplice che mi permetterà di riprovare A senza duplicazione del codice?
Attualmente, ho un do..while
che consente di ritentare N
:
int retries = 1;
do {
// DO A
if ( /*success*/ ) {
break;
} else if (retries > 0) {
// DO B
if ( /*success*/) {
break;
}
} else {
// throw Error
}
} while (retries-- > 0);
Questo è brutto e non ideale in quanto implica che potrei voler riprovare più volte, cosa che non voglio. Dovrò usare un ciclo, ma ci deve essere un modo più semplice che non vedo.
Per contesto, questo è il codice generato in Java, eseguendo istruzioni SQL per provare prima un UPDATE
, quindi se non viene trovata nessuna voce per l'aggiornamento, INSERT
, e se quel comando fallisce (concorrenza, già creato), prova UPDATE
di nuovo.