Поддержка библиотеки Interruptable
Библиотека Interruptable
В Aspose.Slides 18.4 мы представили классы InterruptionToken и InterruptionTokenSource. Они позволяют прерывать длительные задачи, такие как десериализация, сериализация и рендеринг.
- InterruptionTokenSource является источником токенов, передаваемых в ILoadOptions::set_InterruptionToken.
- Когда ILoadOptions::set_InterruptionToken установлен и экземпляр LoadOptions передаётся конструктору Presentation, вызов InterruptionTokenSource::Interrupt() прерывает любую длительную задачу, связанную с этим Presentation.
Следующий фрагмент кода демонстрирует прерывание запущенной задачи:
void Run(Action<SharedPtr<IInterruptionToken>> action, SharedPtr<IInterruptionToken> token)
{
auto threadFunction = std::function<void()>([&action, &token]() -> void
{
action(token);
});
auto thread = System::MakeObject<Threading::Thread>(threadFunction);
thread->Start();
}
void Run()
{
String dataDir = GetDataPath();
auto function = std::function<void(SharedPtr<IInterruptionToken> token)> ([&dataDir](SharedPtr<IInterruptionToken> token) -> void
{
auto options = System::MakeObject<LoadOptions>();
options->set_InterruptionToken(token);
auto presentation = System::MakeObject<Presentation>(dataDir + u"sample.pptx", options);
presentation->Save(dataDir + u"sample.ppt", Export::SaveFormat::Ppt);
});
auto action = System::Action<SharedPtr<IInterruptionToken>>(function);
auto tokenSource = System::MakeObject<InterruptionTokenSource>();
Run(action, tokenSource->get_Token()); // выполнить действие в отдельном потоке
Threading::Thread::Sleep(10000); // тайм-аут
tokenSource->Interrupt(); // остановить конвертацию
}
Вопросы и ответы
Какова цель библиотеки прерывания Aspose.Slides?
Она предоставляет механизм для прерывания длительных операций — таких как загрузка, сохранение или рендеринг презентаций — до их завершения. Это полезно, когда время обработки должно быть ограничено или задача более не требуется.
В чем разница между InterruptionToken и InterruptionTokenSource?
InterruptionTokenпередаётся в API Aspose.Slides и проверяется во время длительных операций.InterruptionTokenSourceиспользуется в вашем коде для создания токенов и инициирует прерывания вызовомInterrupt().
Какие задачи можно прерывать?
Любая задача Aspose.Slides, принимающая InterruptionToken — например загрузка презентации с помощью Presentation(path, loadOptions) или сохранение с помощью Presentation::Save(...) — может быть прервана.
Прерывание происходит мгновенно?
Нет. Прерывание является кооперативным: операция периодически проверяет токен и останавливается, как только обнаруживает, что вызвано Interrupt().
Что происходит, если я вызываю Interrupt() после того, как задача уже завершена?
Ничего — вызов не имеет эффекта, если соответствующая задача уже завершена.
Могу ли я повторно использовать один и тот же InterruptionTokenSource для нескольких задач?
Да — но после вызова Interrupt() на этом источнике все задачи, использующие его токены, будут прерваны. Используйте отдельные источники токенов для независимого управления задачами.