Suporte para Biblioteca Interrompível
Visão geral
Aspose.Slides fornece um mecanismo de processamento interrompível para tarefas de apresentação de longa duração, como desserialização, serialização e renderização. Esse mecanismo baseia‑se nas classes InterruptionToken e InterruptionTokenSource.
InterruptionToken pode ser atribuído a LoadOptions e passado ao construtor Presentation. Quando InterruptionTokenSource::Interrupt() é chamado, a tarefa de longa duração associada é interrompida.
Biblioteca Interrompível
No Aspose.Slides 18.4, introduzimos as classes InterruptionToken e InterruptionTokenSource. Elas permitem interromper tarefas de longa duração, como desserialização, serialização e renderização.
- InterruptionTokenSource é a fonte do(s) token(s) passado(s) para ILoadOptions::set_InterruptionToken.
- Quando ILoadOptions::set_InterruptionToken está definido e a instância LoadOptions é passada ao construtor Presentation, invocar InterruptionTokenSource::Interrupt() interrompe qualquer tarefa de longa duração associada a essa 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()); // executa a ação em uma thread separada
Threading::Thread::Sleep(10000); // tempo limite
tokenSource->Interrupt(); // interrompe a conversão
}
Perguntas Frequentes
Qual é o objetivo da biblioteca de interrupção do Aspose.Slides?
Ela fornece um mecanismo para interromper operações de longa duração — como carregar, salvar ou renderizar apresentações — antes que sejam concluídas. Isso é útil quando o tempo de processamento deve ser limitado ou a tarefa não é mais necessária.
Qual é a diferença entre InterruptionToken e InterruptionTokenSource?
InterruptionTokené passado para a API Aspose.Slides e verificado durante operações de longa duração.InterruptionTokenSourceé usado no seu código para criar tokens e disparar interrupções chamandoInterrupt().
Quais tarefas podem ser interrompidas?
Qualquer tarefa do Aspose.Slides que aceita um InterruptionToken — como carregar uma apresentação com Presentation(path, loadOptions) ou salvar com Presentation::Save(...) — pode ser interrompida.
A interrupção ocorre imediatamente?
Não. A interrupção é cooperativa: a operação verifica periodicamente o token e para assim que detecta que Interrupt() foi chamado.
O que acontece se eu chamar Interrupt() depois que uma tarefa já foi concluída?
Nada — a chamada não tem efeito se a tarefa correspondente já foi concluída.
Posso reutilizar o mesmo InterruptionTokenSource para várias tarefas?
Sim — mas depois de chamar Interrupt() nessa fonte, todas as tarefas que utilizam seus tokens serão interrompidas. Use fontes de token separadas para gerenciar as tarefas de forma independente.