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.

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 chamando Interrupt().

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.