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做)。
我有一个 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做)。