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.
- InterruptionTokenSource é a fonte do(s) token(s) passado(s) para ILoadOptions.InterruptionToken.
- Quando ILoadOptions.InterruptionToken está definido e a instância LoadOptions é passada ao construtor Presentation, invocar InterruptionTokenSource.Interrupt() interrompe qualquer tarefa de longa duração associada a esse Presentation.
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 chamandoInterrupt().
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.