Podpora přerušitelné knihovny

Přehled

Aspose.Slides for .NET poskytuje přerušitelný mechanismus zpracování pro dlouho běžící úlohy prezentací, jako jsou deserializace, serializace a vykreslování. Tento mechanismus je založen na třídách InterruptionToken a InterruptionTokenSource.

InterruptionToken může být přiřazen k LoadOptions a předán konstruktoru Presentation. Když je zavoláno InterruptionTokenSource.Interrupt(), přidružená dlouho běžící úloha je přerušena. Článek také ukazuje, jak použít tento mechanismus spolu se standardním .NET CancellationToken sledováním požadavků na zrušení a voláním Interrupt(), když je zrušení požadováno.

Přerušitelná knihovna

V Aspose.Slides 18.4 jsme představili třídy InterruptionToken a InterruptionTokenSource. Umožňují přerušit dlouho běžící úlohy jako deserializaci, serializaci a vykreslování.

Následující úryvek kódu ukazuje přerušení běžící úlohy:

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); // spusťte akci v samostatném vlákně
    Thread.Sleep(10000);            // časový limit
    tokenSource.Interrupt();        // zastavte konverzi
}

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

.NET CancellationToken a přerušitelná knihovna

Když potřebujete použít CancellationToken společně s přerušitelnou knihovnou Aspose.Slides, zabalte zpracování Presentation a přerušte InterruptionToken, když je CancellationToken.IsCancellationRequested nastaven na true.

Tento C# kód demonstruje operaci:

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); // spusťte akci v samostatném vlákně

    while (!task.Wait(500)) // čekejte a sledujte, zda je nastaveno cancellationToken.IsCancellationRequested
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // přerušte zpracování prezentace
        }
    }
}

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

Často kladené otázky

Jaký je účel přerušitelné knihovny Aspose.Slides?

Poskytuje mechanismus pro přerušení dlouho běžících operací — například načítání, ukládání nebo vykreslování prezentací — před jejich dokončením. To je užitečné, když je nutné omezit čas zpracování nebo už úloha není potřeba.

Jaký je rozdíl mezi InterruptionToken a InterruptionTokenSource?

  • InterruptionToken je předáván API Aspose.Slides a kontrolován během dlouho běžících operací.
  • InterruptionTokenSource se používá ve vašem kódu k vytvoření tokenů a vyvolání přerušení voláním Interrupt().

Mohu použít .NET CancellationToken s přerušitelnou knihovnou?

Ano. Můžete sledovat CancellationToken ve své aplikační logice a zavolat InterruptionTokenSource.Interrupt(), když je zrušení požadováno. To umožňuje Aspose.Slides integrovat se se standardními .NET workflow pro zrušení.

Jaké úlohy lze přerušit?

Jakákoli úloha Aspose.Slides, která přijímá InterruptionToken — například načtení prezentace pomocí Presentation(path, loadOptions) nebo ukládání pomocí Presentation.Save(...) — může být přerušena.

Probíhá přerušení okamžitě?

Ne. Přerušení je kooperativní: operace periodicky kontroluje token a zastaví se, jakmile zjistí, že bylo zavoláno Interrupt().

Co se stane, když zavolám Interrupt() po dokončení úlohy?

Nic — volání nemá žádný účinek, pokud již byla příslušná úloha dokončena.

Mohu znovu použít stejný InterruptionTokenSource pro více úloh?

Ano — ale po zavolání Interrupt() na tomto zdroji budou všechny úlohy používající jeho tokeny přerušeny. Používejte samostatné zdroje tokenů pro nezávislé řízení úloh.