Warten auf vorzeitige Beendigung einer Liste von Futures
Beim Umgang mit asynchronen Aufgaben, die durch Futures dargestellt werden, ist es oft entscheidend, zu warten, bis die gesamte Verarbeitung abgeschlossen ist abgeschlossen ist oder ein Fehler auftritt. Es ist jedoch unerwünscht, unnötig darauf zu warten, dass alle Aufgaben abgeschlossen sind, selbst nachdem ein Fehler aufgetreten ist.
Um dieses Problem zu beheben, sollten Sie die folgenden Schritte in Betracht ziehen:
Utilize ein CompletionService:
Futures sequentiell überwachen:
Abbrechen Verbleibende Aufgaben:
Hier ist ein Beispiel dafür demonstriert diesen Ansatz:
<code class="java">Executor executor = Executors.newFixedThreadPool(4); CompletionService<SomeResult> completionService = new ExecutorCompletionService<SomeResult>(executor); // 4 tasks for(int i = 0; i < 4; i++) { completionService.submit(new Callable<SomeResult>() { public SomeResult call() { // Processing code return result; } }); } int received = 0; boolean errors = false; while(received < 4 && !errors) { Future<SomeResult> resultFuture = completionService.take(); // Blocks until available try { SomeResult result = resultFuture.get(); received ++; // Process the result } catch(Exception e) { // Log or handle the error errors = true; } if (errors) { // Cancel any remaining tasks executor.shutdown(); break; } }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich effizient mit Fehlern und vorzeitigen Abbrüchen bei der Arbeit mit Futures umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!