Suporte para Biblioteca Interruptável

Visão geral

Aspose.Slides for .NET 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. O artigo também mostra como usar esse mecanismo juntamente com o CancellationToken padrão do .NET, monitorando solicitações de cancelamento e chamando Interrupt() quando o cancelamento é solicitado.

Biblioteca Interrompível

Em 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.

O trecho de código a seguir demonstra a interrupção de uma tarefa em execução:

public static void Run()
{
    Action<IInterruptionToken> action = (IInterruptionToken token) =>
    {
        LoadOptions options = new LoadOptions { InterruptionToken = token };
        using (Presentation presentation = new Presentation("sample.pptx", options))
        {
            presentation.Save("sample.ppt", SaveFormat.Ppt);
        }
    };

    InterruptionTokenSource tokenSource = new InterruptionTokenSource();
    Run(action, tokenSource.Token); // executa a ação em uma thread separada
    Thread.Sleep(10000);            // tempo limite
    tokenSource.Interrupt();        // interrompe a conversão
}

private static void Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
    Task.Run(() => { action(token); });
}

CancellationToken .NET e Biblioteca Interrompível

Quando for necessário usar um CancellationToken juntamente com a biblioteca Interruptible do Aspose.Slides, envolva o processamento do Presentation e interrompa o InterruptionToken quando CancellationToken.IsCancellationRequested for true.

Este código C# demonstra a operação:

public static void Main()
{
    CancellationTokenSource tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(20));
    ProcessPresentation("sample.pptx", "sample.pdf", tokenSource.Token);
}

static void ProcessPresentation(string path, string outPath, CancellationToken cancellationToken)
{
    Action<IInterruptionToken> action = (IInterruptionToken token) =>
    {
        LoadOptions options = new LoadOptions {InterruptionToken = token};
        using (Presentation presentation = new Presentation(path, options))
        {
            presentation.Save(outPath, SaveFormat.Pdf);
        }
    };
    
    InterruptionTokenSource tokenSource = new InterruptionTokenSource();
    Task task = Run(action, tokenSource.Token); // execute a ação em uma thread separada

    while (!task.Wait(500)) // espera e monitora se cancellationToken.IsCancellationRequested está definido
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // interrompe o processamento de Presentation
        }
    }
}

private static Task Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
    return Task.Run(() =>
    {
        action(token);
    });
}

FAQ

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

Posso usar o .NET CancellationToken com a biblioteca de interrupção?

Sim. Você pode monitorar o CancellationToken na lógica da sua aplicação e chamar InterruptionTokenSource.Interrupt() quando o cancelamento for solicitado. Isso permite que o Aspose.Slides se integre aos fluxos de cancelamento padrão do .NET.

Quais tarefas podem ser interrompidas?

Qualquer tarefa do Aspose.Slides que aceite 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() após uma tarefa já ter sido 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() nesse source, todas as tarefas que utilizam seus tokens serão interrompidas. Use fontes de token separadas para gerenciar tarefas de forma independente.