--- a/net/minecraft/server/commands/ForceLoadCommand.java
+++ b/net/minecraft/server/commands/ForceLoadCommand.java
@@ -97,7 +_,17 @@
         );
     }
 
+    // Folia start - region threading
+    private static void sendMessage(CommandSourceStack src, CommandSyntaxException ex) {
+        src.sendFailure((Component)ex.getRawMessage());
+    }
+    // Folia end - region threading
+
     private static int queryForceLoad(CommandSourceStack source, ColumnPos pos) throws CommandSyntaxException {
+        // Folia start - region threading
+        io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> {
+            try {
+        // Folia end - region threading
         ChunkPos chunkPos = pos.toChunkPos();
         ServerLevel level = source.getLevel();
         ResourceKey<Level> resourceKey = level.dimension();
@@ -109,14 +_,22 @@
                 ),
                 false
             );
-            return 1;
+            return; // Folia - region threading
         } else {
             throw ERROR_NOT_TICKING.create(chunkPos, resourceKey.location());
         }
+        // Folia start - region threading
+            } catch (CommandSyntaxException ex) {
+                sendMessage(source, ex);
+            }
+        });
+        return 1;
+        // Folia end - region threading
     }
 
     private static int listForceLoad(CommandSourceStack source) {
         ServerLevel level = source.getLevel();
+        io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading
         ResourceKey<Level> resourceKey = level.dimension();
         LongSet forcedChunks = level.getForcedChunks();
         int size = forcedChunks.size();
@@ -134,20 +_,27 @@
         } else {
             source.sendFailure(Component.translatable("commands.forceload.added.none", Component.translationArg(resourceKey.location())));
         }
+        }); // Folia - region threading
 
-        return size;
+        return 1; // Folia - region threading
     }
 
     private static int removeAll(CommandSourceStack source) {
         ServerLevel level = source.getLevel();
         ResourceKey<Level> resourceKey = level.dimension();
+        io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading
         LongSet forcedChunks = level.getForcedChunks();
         forcedChunks.forEach(packedChunkPos -> level.setChunkForced(ChunkPos.getX(packedChunkPos), ChunkPos.getZ(packedChunkPos), false));
         source.sendSuccess(() -> Component.translatable("commands.forceload.removed.all", Component.translationArg(resourceKey.location())), true);
+        }); // Folia - region threading
         return 0;
     }
 
     private static int changeForceLoad(CommandSourceStack source, ColumnPos from, ColumnPos to, boolean add) throws CommandSyntaxException {
+        // Folia start - region threading
+        io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> {
+            try {
+        // Folia end - region threading
         int min = Math.min(from.x(), to.x());
         int min1 = Math.min(from.z(), to.z());
         int max = Math.max(from.x(), to.x());
@@ -207,11 +_,18 @@
                         );
                     }
 
-                    return i2x;
+                    return; // Folia - region threading
                 }
             }
         } else {
             throw BlockPosArgument.ERROR_OUT_OF_WORLD.create();
         }
+        // Folia start - region threading
+            } catch (CommandSyntaxException ex) {
+                sendMessage(source, ex);
+            }
+        });
+        return 1;
+        // Folia end - region threading
     }
 }
