可中断库支持

可中断库

Aspose.Slides 18.4 中,我们引入了 InterruptionTokenInterruptionTokenSource 类。它们允许您中断诸如反序列化、序列化和渲染等长时间运行的任务。

以下代码片段演示了如何中断正在运行的任务:

final InterruptionTokenSource tokenSource = new InterruptionTokenSource();

Runnable interruption = new Runnable() {
    public void run() {
        LoadOptions loadOptions = new LoadOptions();
        loadOptions.setInterruptionToken(tokenSource.getToken());

        Presentation presentation = new Presentation("sample.pptx", loadOptions);
        try{
            presentation.save("sample.ppt", SaveFormat.Ppt);
        }
        finally {
            presentation.dispose();
        }
    }
};

Thread thread = new Thread(interruption);
thread.start();          // 在单独的线程中运行操作
Thread.sleep(10000);     // 超时
tokenSource.interrupt(); // 停止转换

常见问题

Aspose.Slides 中断库的目的是什么?

它提供了一种机制,可在长时间运行的操作(例如加载、保存或渲染演示文稿)完成之前中断它们。当需要限制处理时间或任务不再需要时,这非常有用。

InterruptionToken 与 InterruptionTokenSource 有何区别?

  • InterruptionToken 被传递给 Aspose.Slides API 并在长时间运行的操作期间进行检查。
  • InterruptionTokenSource 用于您的代码中创建令牌,并通过调用 Interrupt() 来触发中断。

哪些任务可以被中断?

任何接受 InterruptionToken 的 Aspose.Slides 任务——例如使用 Presentation(path, loadOptions) 加载演示文稿或使用 Presentation.save(...) 保存——都可以被中断。

中断会立即发生吗?

不会。中断是协作式的:操作会定期检查令牌,并在检测到已调用 Interrupt() 时立即停止。

如果在任务已经完成后调用 Interrupt() 会怎样?

不会有任何影响——如果相应的任务已经完成,调用将不产生效果。

我可以在多个任务中复用同一个 InterruptionTokenSource 吗?

可以——但在对该源调用 Interrupt() 后,使用其令牌的所有任务都会被中断。请使用独立的令牌源来分别管理任务。