Ondersteuning voor onderbreekbare bibliotheek

Overzicht

Aspose.Slides voor .NET biedt een onderbreekbare verwerkingsmechanisme voor langdurige presentatietaken, zoals deserialisatie, serialisatie en weergave. Dit mechanisme is gebaseerd op de InterruptionToken‑ en InterruptionTokenSource‑klassen.

Een InterruptionToken kan worden toegewezen aan LoadOptions en doorgegeven aan de Presentation‑constructor. Wanneer InterruptionTokenSource.Interrupt() wordt aangeroepen, wordt de bijbehorende langdurige taak onderbroken. Het artikel toont ook hoe dit mechanisme samen met de standaard .NET CancellationToken kan worden gebruikt door annuleringsverzoeken te monitoren en Interrupt() aan te roepen wanneer annulering wordt gevraagd.

Onderbreekbare bibliotheek

In Aspose.Slides 18.4 hebben we de InterruptionToken‑ en InterruptionTokenSource‑klassen geïntroduceerd. Ze stellen u in staat om langdurige taken zoals deserialisatie, serialisatie en weergave te onderbreken.

De volgende code‑fragment toont hoe een draaiende taak wordt onderbroken:

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); // voer de actie uit in een aparte thread
    Thread.Sleep(10000);            // time-out
    tokenSource.Interrupt();        // stop de conversie
}

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

.NET CancellationToken en Onderbreekbare bibliotheek

Wanneer u een CancellationToken naast de Aspose.Slides‑onderbreekbare bibliotheek wilt gebruiken, wikkel dan de verwerking van de Presentation en onderbreek de InterruptionToken wanneer CancellationToken.IsCancellationRequested true is.

Deze C#‑code demonstreert de werking:

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); // voer de actie uit in een aparte thread

    while (!task.Wait(500)) // wacht en controleer of cancellationToken.IsCancellationRequested is ingesteld
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // onderbreek de verwerking van de presentatie
        }
    }
}

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

FAQ

Wat is het doel van de Aspose.Slides‑onderbreekbare bibliotheek?

Het biedt een mechanisme om langdurige bewerkingen—zoals het laden, opslaan of weergeven van presentaties—te onderbreken voordat ze zijn voltooid. Dit is nuttig wanneer de verwerkingstijd beperkt moet worden of de taak niet langer nodig is.

Wat is het verschil tussen InterruptionToken en InterruptionTokenSource?

  • InterruptionToken wordt aan de Aspose.Slides‑API doorgegeven en tijdens langdurige bewerkingen gecontroleerd.
  • InterruptionTokenSource wordt in uw code gebruikt om tokens te maken en onderbrekingen te activeren door Interrupt() aan te roepen.

Kan ik .NET CancellationToken gebruiken met de onderbreekbare bibliotheek?

Ja. U kunt de CancellationToken in uw toepassingslogica monitoren en InterruptionTokenSource.Interrupt() aanroepen wanneer annulering wordt gevraagd. Dit maakt het mogelijk dat Aspose.Slides integreert met de standaard .NET‑annuleringsworkflows.

Welke taken kunnen worden onderbroken?

Elke Aspose.Slides‑taak die een InterruptionToken accepteert—zoals het laden van een presentatie met Presentation(path, loadOptions) of het opslaan met Presentation.Save(...)—kan worden onderbroken.

Wordt onderbreking onmiddellijk uitgevoerd?

Nee. Onderbreking is coöperatief: de bewerking controleert periodiek de token en stopt zodra Interrupt() is aangeroepen.

Wat gebeurt er als ik Interrupt() aanroep nadat een taak al is voltooid?

Niets—de oproep heeft geen effect als de bijbehorende taak reeds is afgerond.

Kan ik dezelfde InterruptionTokenSource hergebruiken voor meerdere taken?

Ja—maar nadat u Interrupt() op die bron hebt aangeroepen, worden alle taken die zijn tokens gebruiken onderbroken. Gebruik aparte token‑bronnen om taken onafhankelijk te beheren.