222. Introducing ShutdownOnFailure
As its name suggests, StructuredTaskScope.ShutdownOnFailure
is capable of returning the exception of the first subtask that completes exceptionally and interrupts the rest of the subtasks (threads). For instance, we may want to fetch the testers with IDs 1, 2, and 3. Since we need exactly these three testers, we want to be informed if any of them are not available and, if so, cancel everything (i.e., the remaining threads). The code looks as follows:
public static TestingTeam buildTestingTeam()
throws InterruptedException, ExecutionException {
try (ShutdownOnFailure scope
= new StructuredTaskScope.ShutdownOnFailure()) {
Subtask<String> subtask1
= scope.fork(() -> fetchTester(1));
Subtask<String> subtask2
= scope.fork(() -> fetchTester(2));
Subtask<String> subtask3
= scope.fork(() -> fetchTester(Integer.MAX_VALUE));
scope.join();
logger.info(() -> "Subtask...