等待 Future 清單的提前終止
在處理 future 表示的非同步任務時,等待所有處理完成通常至關重要。完成或發生錯誤。然而,即使在發生錯誤後,不必要地等待所有任務完成也是不可取的。
要解決這個問題,請考慮以下步驟:
利用a CompletionService:
依序監視 Future:
取消剩餘任務:
這裡是一個範例示範了這個方法:
<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>
以上是使用 Future 時如何有效處理錯誤和提前終止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!