Ho una serie di attività simultanee da eseguire. Se uno di loro fallisce, voglio interromperli tutti e attendere la fine. Ma supponendo che nessuno di loro fallisca, voglio aspettare che tutti finiscano.In Java, come posso attendere tutte le attività, ma interrompere il primo errore?
ExecutorCompletionService sembra quasi quello che voglio qui, ma non sembra essere un modo per dire se tutte le mie attività sono state fatte, tranne mantenendo un conteggio separato del numero di attività. (Si noti che entrambi gli esempi di Javadoc per ExecutorCompletionService tengono traccia del conteggio "n" delle attività, e lo usano per determinare se il servizio è finito.)
Sto trascurando qualcosa, o davvero? devo scrivere questo codice da solo?
Potrebbe gestire la condizione di errore nell'attività, ma sì, chiamare get() sul futuro è la cosa migliore. –
Ovviamente ho bisogno di iterare sui compiti, ma posso solo prendere() i future da ExecutorCompletionService. (Questo è ciò che fa l'esempio Javadoc.) Il problema è che non posso semplicemente accettare() finché non esaurisco i compiti, perché se prendo() quando non c'è lavoro, rimarrò bloccato per sempre. –
Giusto, quindi è necessario precalcolare il numero di attività (come si pensava), e prenderlo molte volte. –