是否可以中断由 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界面无关所以我没有添加runWriteActionrunReadAction 这里。

由于任务可能需要较长时间,我想添加一个用户取消订单的按钮。但是,我对扩展开发很陌生,谁能帮我弄清楚如何实现 cancel 功能?非常感谢您的任何建议。

一项耗时的任务应该在进度指示器下执行,参见 com.intellij.openapi.progress.ProgressManager。在执行任务期间,您可以调用 com.intellij.openapi.progress.ProgressManager#checkCanceled 查看任务是否已被用户取消。这个调用应该是便宜的,所以你可以经常调用它来确保你的进程及时响应用户的取消请求。