Un'alternativa (che non mi piace particolarmente, ma a volte viene usata) è l'approcio FSM (Finite-State-Machine) al problema. Utile nei casi in cui, ad esempio, uno degli step debba essere ritentato per un certo numero di volte in caso di errore, prima di terminare definitivamente.
Pseudo-codice:
codice:
while( condizione_ciclo ) {
switch( stato ) {
case 0: /* Primo task */
if ( A ) {
stato = 1;
} else {
/* ritento (stato = 0) o esco (stato = -1) ? */
}
case 1: /* Secondo task */
if ( B ) {
stato = 2;
} else {
/* ritento (stato = 1) o esco (stato = -1) ? */
}
case 2: /* Terzo task */
if ( C ) {
stato = 3;
} else {
/* ritento (stato = 2) o esco (stato = -1) ? */
}
...
default:
condizione_ciclo = false;
}
}
Ciao.