diff --git a/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java b/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
index dc79a46..35e68e9 100644
--- a/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
+++ b/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
@@ -538,8 +538,7 @@
 
   private void updateGroupsNumberOfIds(List<ClassGroup> groups) {
     TaskCollection<?> updateIdsTasks =
-        new TaskCollection<>(
-            appView.options().getThreadingModule(), executorService, groups.size());
+        new TaskCollection<>(appView.options(), executorService, groups.size());
     try {
       for (ClassGroup group : groups) {
         updateIdsTasks.submit(group::updateNumbersOfIds);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java b/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
index 50261b2..6b13747 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
@@ -86,18 +86,14 @@
       // The non-synthetic holder is not scheduled. It will be processed once holder is scheduled.
       return;
     }
-    try {
-      nonTerminalTasks.submit(
-          () ->
-              converter.rewriteNonDesugaredCode(
-                  method,
-                  eventConsumer,
-                  OptimizationFeedbackIgnore.getInstance(),
-                  this,
-                  processorContext.createMethodProcessingContext(method)));
-    } catch (ExecutionException e) {
-      throw new RuntimeException(e);
-    }
+    nonTerminalTasks.submitUnchecked(
+        () ->
+            converter.rewriteNonDesugaredCode(
+                method,
+                eventConsumer,
+                OptimizationFeedbackIgnore.getInstance(),
+                this,
+                processorContext.createMethodProcessingContext(method)));
   }
 
   @Override
@@ -112,18 +108,14 @@
     if (method.getDefinition().isAbstract()) {
       return;
     }
-    try {
-      terminalTasks.submit(
-          () ->
-              converter.rewriteDesugaredCode(
-                  method,
-                  OptimizationFeedbackIgnore.getInstance(),
-                  this,
-                  processorContext.createMethodProcessingContext(method),
-                  MethodConversionOptions.forD8(converter.appView)));
-    } catch (ExecutionException e) {
-      throw new RuntimeException(e);
-    }
+    terminalTasks.submitUnchecked(
+        () ->
+            converter.rewriteDesugaredCode(
+                method,
+                OptimizationFeedbackIgnore.getInstance(),
+                this,
+                processorContext.createMethodProcessingContext(method),
+                MethodConversionOptions.forD8(converter.appView)));
   }
 
   public void scheduleDesugaredMethodsForProcessing(Iterable<ProgramMethod> methods) {
diff --git a/src/main/java/com/android/tools/r8/threading/TaskCollection.java b/src/main/java/com/android/tools/r8/threading/TaskCollection.java
index 8ef8168..2316ec9 100644
--- a/src/main/java/com/android/tools/r8/threading/TaskCollection.java
+++ b/src/main/java/com/android/tools/r8/threading/TaskCollection.java
@@ -35,7 +35,12 @@
   }
 
   public TaskCollection(InternalOptions options, ExecutorService executorService) {
-    this(options.getThreadingModule(), executorService, -1);
+    this(options, executorService, -1);
+  }
+
+  public TaskCollection(
+      InternalOptions options, ExecutorService executorService, int initialCapacity) {
+    this(options.getThreadingModule(), executorService, initialCapacity);
   }
 
   /**
diff --git a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
index bfab6da..9c8f6e7 100644
--- a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
@@ -132,13 +132,7 @@
     TaskCollection<R> tasks = new TaskCollection<>(threadingModule, executorService);
     try {
       items.forEachWithIndex(
-          (index, item) -> {
-            try {
-              tasks.submit(() -> consumer.apply(item, index));
-            } catch (ExecutionException e) {
-              throw new UncheckedExecutionException(e);
-            }
-          });
+          (index, item) -> tasks.submitUnchecked(() -> consumer.apply(item, index)));
     } catch (UncheckedExecutionException e) {
       throw e.rethrow();
     }
diff --git a/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java b/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java
index e65e4d9..f239b67 100644
--- a/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java
@@ -23,7 +23,7 @@
       ThreadTask... tasks)
       throws ExecutionException {
     assert tasks.length > 0;
-    TaskCollection<?> taskCollection = new TaskCollection<>(options, executorService);
+    TaskCollection<?> taskCollection = new TaskCollection<>(options, executorService, tasks.length);
     if (timingMerger.isEmpty()) {
       for (ThreadTask task : tasks) {
         if (task.shouldRun()) {
