【发布时间】:2016-07-29 10:13:58
【问题描述】:
我有一个 JavaFX 服务,其中创建了 Task 来做一些工作:
public class MyService extends Service<Void> {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
// do some work
return null;
}
};
}
}
我也有一个成功的处理程序:
myService.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle( final WorkerStateEvent event ) {
// check what Task has finished
}
});
由于可以同时运行服务不止一次,我无法从成功处理程序中区分任务实例已完成。查看文档,我找不到任何方法,该怎么做。
我的想法是扩展 Task 以包含一些 id,例如整数,然后能够从事件处理程序中获取该实例。
欢迎任何想法,如何实现这种行为。
提前致谢。
【问题讨论】:
-
我相信每个服务实例每次最多可能有 1 个任务处于活动状态。 (来自docs:“服务创建和管理 a 任务...”。)该任务当然可能产生额外的线程,但它自己负责用于同步它们。您还可以拥有单个服务类的多个实例,这可能是您想要的。每个服务实例的状态都绑定到其对应任务的状态,但与任务不同的是,服务可以重新启动(然后创建一个新任务)。
-
“因为可以同时运行服务不止一次”。这是不正确的。给定的服务实例一次只能执行一项任务。
-
恕我直言,
Service可以运行多个Tasks,只是Service事件处理程序将根据Task的状态被调用。