是否可以中断由 ApplicationManager.getApplication().executeOnPooledThread 调用的可运行对象?
Is it possible to interrupt a runnable called by ApplicationManager.getApplication().executeOnPooledThread?
我目前正在开发一个 IDE 嵌入 JCEF 以进行前端交互的扩展。一旦用户点击一个按钮,MessageRouterHandler
中实现的onQuery
方法就会被执行,并且会执行一个耗时的任务。
耗时任务在一个方法中实现(在主线程以外的线程上异步,以防UI被冻结),并包装成类似
的形式
private void task(CefBrowser browser, CefQueryCallback callback) {
ApplicationManager.getApplication().executeOnPooledThread(() -> {
...DETAILED IMPLEMENTATION FOR THE TASK...
});
}
runnable只包含与文件读取相关的操作(由用户点击JCEF webview上的另一个按钮选择)与IDE界面无关所以我没有添加runWriteAction
或 runReadAction
这里。
由于任务可能需要较长时间,我想添加一个用户取消订单的按钮。但是,我对扩展开发很陌生,谁能帮我弄清楚如何实现 cancel 功能?非常感谢您的任何建议。
一项耗时的任务应该在进度指示器下执行,参见 com.intellij.openapi.progress.ProgressManager
。在执行任务期间,您可以调用 com.intellij.openapi.progress.ProgressManager#checkCanceled
查看任务是否已被用户取消。这个调用应该是便宜的,所以你可以经常调用它来确保你的进程及时响应用户的取消请求。
我目前正在开发一个 IDE 嵌入 JCEF 以进行前端交互的扩展。一旦用户点击一个按钮,MessageRouterHandler
中实现的onQuery
方法就会被执行,并且会执行一个耗时的任务。
耗时任务在一个方法中实现(在主线程以外的线程上异步,以防UI被冻结),并包装成类似
的形式private void task(CefBrowser browser, CefQueryCallback callback) {
ApplicationManager.getApplication().executeOnPooledThread(() -> {
...DETAILED IMPLEMENTATION FOR THE TASK...
});
}
runnable只包含与文件读取相关的操作(由用户点击JCEF webview上的另一个按钮选择)与IDE界面无关所以我没有添加runWriteAction
或 runReadAction
这里。
由于任务可能需要较长时间,我想添加一个用户取消订单的按钮。但是,我对扩展开发很陌生,谁能帮我弄清楚如何实现 cancel 功能?非常感谢您的任何建议。
一项耗时的任务应该在进度指示器下执行,参见 com.intellij.openapi.progress.ProgressManager
。在执行任务期间,您可以调用 com.intellij.openapi.progress.ProgressManager#checkCanceled
查看任务是否已被用户取消。这个调用应该是便宜的,所以你可以经常调用它来确保你的进程及时响应用户的取消请求。