Поддержка библиотеки Interruptable

Interruptable Library

В Aspose.Slides 18.4, мы представили классы InterruptionToken и InterruptionTokenSource. Они позволяют прерывать длительные задачи, такие как десериализация, сериализация и рендеринг.

Следующий фрагмент кода демонстрирует прерывание выполняющейся задачи:

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(); // остановить конвертацию

FAQ

Какова цель библиотеки прерываний Aspose.Slides?

Она предоставляет механизм прерывания длительных операций — например, загрузки, сохранения или рендеринга презентаций — до их завершения. Это полезно, когда нужно ограничить время обработки или задача более не требуется.

В чём разница между InterruptionToken и InterruptionTokenSource?

  • InterruptionToken передаётся в API Aspose.Slides и проверяется во время длительных операций.
  • InterruptionTokenSource используется в вашем коде для создания токенов и инициирования прерываний вызовом Interrupt().

Какие задачи можно прервать?

Любую задачу Aspose.Slides, принимающую InterruptionToken — например, загрузку презентации через Presentation(path, loadOptions) или сохранение через Presentation.save(...) — можно прервать.

Прерывание происходит немедленно?

Нет. Прерывание кооперативное: операция периодически проверяет токен и останавливается, как только обнаруживает, что был вызван Interrupt().

Что произойдёт, если я вызову Interrupt() после завершения задачи?

Ничего — вызов не влияет, если соответствующая задача уже завершена.

Можно ли повторно использовать один и тот же InterruptionTokenSource для нескольких задач?

Да, но после вызова Interrupt() у этого источника все задачи, использующие его токены, будут прерваны. Используйте отдельные источники токенов для независимого управления задачами.