Tengo una serie de tareas simultáneas para ejecutar. Si alguno de ellos falla, quiero interrumpirlos a todos y esperar la finalización. Pero suponiendo que ninguno de ellos falle, quiero esperar a que todos terminen.En Java, ¿cómo espero todas las tareas, pero me detengo al primer error?
ExecutorCompletionService parece casi lo que quiero aquí, pero no parece haber una forma de saber si todas mis tareas están hechas, excepto al mantener un conteo separado del número de tareas. (Tenga en cuenta que ambos ejemplos de Javadoc for ExecutorCompletionService hacen un seguimiento del recuento "n" de las tareas y lo utilizan para determinar si el servicio ha finalizado)
¿Estoy pasando por alto algo, o realmente lo hago? tengo que escribir este código yo mismo?
Podía manejar la condición de error en la tarea, pero sí, llamar a get() en el futuro es lo mejor. –
Necesito iterar sobre las tareas, por supuesto, pero puedo tomar() el futuro de ExecutorCompletionService. (Esto es lo que hace el ejemplo de Javadoc). El problema es que no puedo simplemente tomar() hasta que me quedo sin tareas, porque si tomo() cuando no queda trabajo, me quedaré esperando por siempre. –
Correcto, por lo que necesita precalcular el número de tareas (como pensaba), y tomar eso muchas veces. –