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í.
- InterruptionTokenSource je zdrojem tokenu(ů) předávaných do ILoadOptions.InterruptionToken.
- Když je ILoadOptions.InterruptionToken nastaven a instance LoadOptions je předána konstruktoru Presentation, zavolání InterruptionTokenSource.Interrupt() přeruší jakoukoli dlouho běžící úlohu spojenou s touto Presentation.
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?
InterruptionTokenje předáván API Aspose.Slides a kontrolován během dlouho běžících operací.InterruptionTokenSourcese používá ve vašem kódu k vytvoření tokenů a vyvolání přerušení volánímInterrupt().
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.