Supporto per la libreria interruttibile
Panoramica
Aspose.Slides for .NET fornisce un meccanismo di elaborazione interrompibile per operazioni di presentazione a lunga durata, come deserializzazione, serializzazione e rendering. Questo meccanismo si basa sulle classi InterruptionToken e InterruptionTokenSource.
Un InterruptionToken può essere assegnato a LoadOptions e passato al costruttore di Presentation. Quando si chiama InterruptionTokenSource.Interrupt(), l’operazione a lunga durata associata viene interrotta. L’articolo mostra anche come utilizzare questo meccanismo insieme al CancellationToken standard di .NET monitorando le richieste di cancellazione e chiamando Interrupt() quando la cancellazione è richiesta.
Libreria Interrompibile
In Aspose.Slides 18.4, abbiamo introdotto le classi InterruptionToken e InterruptionTokenSource. Esse consentono di interrompere operazioni a lunga durata come deserializzazione, serializzazione e rendering.
- InterruptionTokenSource è la sorgente del token (o dei token) passato a ILoadOptions.InterruptionToken.
- Quando ILoadOptions.InterruptionToken è impostato e l’istanza di LoadOptions viene passata al costruttore di Presentation, chiamare InterruptionTokenSource.Interrupt() interrompe qualsiasi operazione a lunga durata associata a quella Presentation.
Il seguente frammento di codice dimostra come interrompere un’operazione in esecuzione:
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); // esegui l'azione in un thread separato
Thread.Sleep(10000); // tempo di attesa
tokenSource.Interrupt(); // interrompi la conversione
}
private static void Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
Task.Run(() => { action(token); });
}
.NET CancellationToken e Libreria Interrompibile
Quando è necessario utilizzare un CancellationToken insieme alla libreria Interrompibile di Aspose.Slides, avvolgere l’elaborazione di Presentation e interrompere il InterruptionToken quando CancellationToken.IsCancellationRequested è true.
Questo codice C# dimostra l’operazione:
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); // esegui l'azione in un thread separato
while (!task.Wait(500)) // attendi e monitora se cancellationToken.IsCancellationRequested è impostato
{
if (cancellationToken.IsCancellationRequested)
{
Console.WriteLine("Presentation processing was canceled");
tokenSource.Interrupt(); // interrompi l'elaborazione della Presentazione
}
}
}
private static Task Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
return Task.Run(() =>
{
action(token);
});
}
FAQ
Qual è lo scopo della libreria di interruzione di Aspose.Slides?
Fornisce un meccanismo per interrompere operazioni a lunga durata — come caricamento, salvataggio o rendering di presentazioni — prima che terminino. È utile quando il tempo di elaborazione deve essere limitato o l’operazione non è più necessaria.
Qual è la differenza tra InterruptionToken e InterruptionTokenSource?
InterruptionTokenviene passato all’API Aspose.Slides e verificato durante le operazioni a lunga durata.InterruptionTokenSourceè usato nel tuo codice per creare token e attivare interruzioni chiamandoInterrupt().
Posso usare .NET CancellationToken con la libreria di interruzione?
Sì. Puoi monitorare il [CancellationToken] nella logica della tua applicazione e chiamare InterruptionTokenSource.Interrupt() quando viene richiesto l’annullamento. Questo consente ad Aspose.Slides di integrarsi con i flussi di lavoro di cancellazione standard di .NET.
Quali attività possono essere interrotte?
Qualsiasi attività di Aspose.Slides che accetta un [InterruptionToken] — ad esempio il caricamento di una presentazione con Presentation(path, loadOptions) o il salvataggio con Presentation.Save(...) — può essere interrotta.
L’interruzione avviene immediatamente?
No. L’interruzione è cooperativa: l’operazione controlla periodicamente il token e si arresta non appena rileva che Interrupt() è stato chiamato.
Cosa succede se chiamo Interrupt() dopo che un’attività è già terminata?
Niente — la chiamata non ha effetto se l’attività corrispondente è già terminata.
Posso riutilizzare lo stesso InterruptionTokenSource per più attività?
Sì — ma dopo aver chiamato Interrupt() su quella sorgente, tutte le attività che utilizzano i suoi token verranno interrotte. Usa sorgenti di token separate per gestire le attività in modo indipendente.