Soporte para Biblioteca Interrumpible
Contents
[
Hide
]
Biblioteca Interrumpible
En Aspose.Slides 18.4, añadimos la clase InterruptionToken y la clase InterruptionTokenSource. Proporcionan soporte para la interrupción de tareas de larga duración, como deserialización, serialización o representación.
- InterruptionTokenSource representa la fuente del token o múltiples tokens pasados a ILoadOptions.InterruptionToken.
- Cuando se establece ILoadOptions.InterruptionToken y la instancia de LoadOptions se pasa al constructor de Presentation, invocar el método InterruptionTokenSource.Interrupt provoca la interrupción de cualquier tarea de larga duración relacionada con la Presentación.
Este fragmento de código a continuación demuestra la interrupción de una tarea en ejecución:
public static void Run()
{
Action<IInterruptionToken> action = (IInterruptionToken token) =>
{
LoadOptions options = new LoadOptions { InterruptionToken = token };
using (Presentation presentation = new Presentation("pres.pptx", options))
{
presentation.Save("pres.ppt", SaveFormat.Ppt);
}
};
InterruptionTokenSource tokenSource = new InterruptionTokenSource();
Run(action, tokenSource.Token); // ejecutar acción en un hilo separado
Thread.Sleep(10000); // tiempo de espera
tokenSource.Interrupt(); // detener conversión
}
private static void Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
Task.Run(() => { action(token); });
}
.NET CancellationToken y Biblioteca Interrumpible
Cuando necesite usar el CancellationToken junto con la Biblioteca Interrumpible de Slides, puede envolver el procesamiento de la Presentación e interrumpir InterruptionToken si cancellationToken.IsCancellationRequested está establecido en verdadero.
Este código C# demuestra la operación descrita:
public static void Main()
{
CancellationTokenSource tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(20));
ProcessPresentation("pres.pptx", "pres.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); // ejecutar acción en un hilo separado
while (!task.Wait(500)) // esperar para monitorear si cancellationToken.IsCancellationRequested está establecido.
{
if (cancellationToken.IsCancellationRequested)
{
Console.WriteLine("El procesamiento de la presentación fue cancelado");
tokenSource.Interrupt(); // interrumpir el procesamiento de la Presentación
}
}
}
private static Task Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
return Task.Run(() =>
{
action(token);
});
}