Поддержка библиотеки Interruptable
Interruptable Library
В Aspose.Slides 18.4, мы представили классы InterruptionToken и InterruptionTokenSource. Они позволяют прерывать длительные задачи, такие как десериализация, сериализация и рендеринг.
- InterruptionTokenSource — источник токена(ов), передаваемых в ILoadOptions.setInterruptionToken.
- Когда задаётся ILoadOptions.setInterruptionToken и экземпляр LoadOptions передаётся конструктору Presentation, вызов InterruptionTokenSource.Interrupt() прерывает любую длительную задачу, связанную с этой Presentation.
Следующий фрагмент кода демонстрирует прерывание выполняющейся задачи:
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() у этого источника все задачи, использующие его токены, будут прерваны. Используйте отдельные источники токенов для независимого управления задачами.