diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java index 87da3cbdb..a5547a1f3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java @@ -98,7 +98,7 @@ public class LibraryDownloadTask extends Task { Exception t = task.getException(); if (t instanceof DownloadException) throw new LibraryDownloadException(library, t.getCause()); - else if (t == null) + else if (t instanceof CancellationException) throw new CancellationException(); else throw new LibraryDownloadException(library, t); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/AsyncTaskExecutor.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/AsyncTaskExecutor.java index 99bdb53e4..0d1e24741 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/AsyncTaskExecutor.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/AsyncTaskExecutor.java @@ -105,8 +105,10 @@ public final class AsyncTaskExecutor extends TaskExecutor { .thenComposeAsync(unused -> { totTask.addAndGet(tasks.size()); - if (isCancelled()) + if (isCancelled()) { + for (Task task : tasks) task.setException(new CancellationException()); return CompletableFuture.runAsync(this::checkCancellation); + } return CompletableFuture.allOf(tasks.stream() .map(task -> CompletableFuture.completedFuture(null) @@ -130,8 +132,6 @@ public final class AsyncTaskExecutor extends TaskExecutor { } private CompletableFuture executeCompletableFutureTask(Task parentTask, CompletableFutureTask task) { - checkCancellation(); - return CompletableFuture.completedFuture(null) .thenComposeAsync(unused -> { checkCancellation(); @@ -202,8 +202,6 @@ public final class AsyncTaskExecutor extends TaskExecutor { } private CompletableFuture executeNormalTask(Task parentTask, Task task) { - checkCancellation(); - return CompletableFuture.completedFuture(null) .thenComposeAsync(unused -> { checkCancellation();