package com.faforever.client.util;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.concurrent.Worker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
public final class ConcurrentUtil {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private ConcurrentUtil() {
// Utility class
}
/**
* Executes the given task in background and calls the specified callback when finished. The callback is always called
* on the FX application thread.
*
* @return the {@link Service} the specified task has been started in.
*/
@SuppressWarnings("unchecked")
// TODO this needs to be removed
public static <T> Service<T> executeInBackground(final Worker<T> worker) {
Service<T> service = new Service<T>() {
@Override
protected Task<T> createTask() {
return (Task<T>) worker;
}
};
service.setOnFailed(event -> logger.error("Task failed", event.getSource().getException()));
service.start();
return service;
}
}