WorkspaceJob 的使用

Usage of WorkspaceJob

我有一个 eclipse 插件,它有一些性能问题。查看进度视图有时会有多个作业在等待,从代码来看,它的大部分架构都是基于 类 的,它扩展了 WorkspaceJobs 并混合了 Guava EventBus 事件。当前的解决方案还涉及嵌套作业...

我阅读了文档,我理解它们的目的,但我不明白为什么我可以使用工作区作业,而我可以 运行 syncexec/asyncexec 来自事件触发的方法是送上车的?

例如,我可以创建一个事件来触发将要执行的操作 Job 1,而不是创建 3 个等待另一个的作业,然后当该方法完成时,它会发送不同的事件类型这将触发一个方法来执行 Job 2 会做的事情等等...

所以代替:

WorkspaceJob Job1 = new WorkspaceJob("Job1");
Job1.schedule();
WorkspaceJob Job2 = new WorkspaceJob("Job2");
Job2.schedule();
WorkspaceJob Job1 = new WorkspaceJob("Job3");
Job3.schedule();

我可以使用:

@Subsribe
public replaceJob1(StartJob1Event event) {
    //do what runInWorkspace() of Job1 would have done
    com.something.getStaticEventBus().post(new Job1FinishedEvent());
}


@Subsribe
public replaceJob2(Job1FinishedEvent event) {
    //do what `runInWorkspace()` of Job2 would have done
    com.something.getStaticEventBus().post(new Job2FinishedEvent());
}

@Subsribe
public replaceJob3(Job2FinishedEvent event) {
    //do what `runInWorkspace()` of Job3 would have done
    com.something.getStaticEventBus().post(new Job3FinishedEvent());
}

我还没有尝试过,因为我尽可能地简化了想法,但问题比这更复杂,但我认为 EventBus 在性能方面会胜过 WorkspaceJobs

任何人都可以证实我的想法或告诉我为什么我不应该尝试这个(除了我必须有一个良好的事件架构这一事实)吗?

WorkspaceJob 延迟资源更改事件,直到作业完成。这可以防止监听资源更改的组件接收到一半完成的更改。这对您的申请可能重要,也可能不重要。

我无法评论 Guava 代码,因为我对此一无所知 - 但请注意,如果您的代码很长 运行,您必须确保它在后台线程中运行(哪个 WorkbenchJob做)。