minecraft-src/net/minecraft/util/thread/TaskScheduler.java
2025-07-04 02:49:36 +03:00

45 lines
1 KiB
Java

package net.minecraft.util.thread;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
public interface TaskScheduler<R extends Runnable> extends AutoCloseable {
String name();
void schedule(R task);
default void close() {
}
R wrapRunnable(Runnable runnable);
default <Source> CompletableFuture<Source> scheduleWithResult(Consumer<CompletableFuture<Source>> resultConsumer) {
CompletableFuture<Source> completableFuture = new CompletableFuture();
this.schedule(this.wrapRunnable(() -> resultConsumer.accept(completableFuture)));
return completableFuture;
}
static TaskScheduler<Runnable> wrapExecutor(String name, Executor executor) {
return new TaskScheduler<Runnable>() {
@Override
public String name() {
return name;
}
@Override
public void schedule(Runnable task) {
executor.execute(task);
}
@Override
public Runnable wrapRunnable(Runnable runnable) {
return runnable;
}
public String toString() {
return name;
}
};
}
}