我有一个Eclipse插件,它有一些性能问题。查看进度视图时,有时会有多个作业在等待,从代码来看,它的大部分结构都基于扩展
WorkspaceJobs
混合
Guava EventBus
事件。当前的解决方案还涉及嵌套作业…
我阅读了文档,我理解它们的用途,但我不明白为什么我可以运行工作区作业
syncexec/asyncexec
从总线上发送事件时触发的方法?
例如,我可以创建一个事件来触发将要执行的操作,而不是创建等待另一个操作的3个作业。
Job 1
,则当该方法完成时,它将发送一个不同的事件类型,该类型将触发一个执行以下操作的方法
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
将在性能方面胜于
工作区作业
.
有人能证实我的想法或告诉我为什么我不应该尝试这个(除了我必须对我的事件有一个好的架构之外)?