45 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
| 			}
 | |
| 		};
 | |
| 	}
 | |
| }
 |