Megszakítható könyvtár támogatása
Áttekintés
Az Aspose.Slides for .NET egy megszakítható feldolgozási mechanizmust biztosít a hosszú ideig futó prezentációs feladatokhoz, például a deszerializációhoz, sorosításhoz és megjelenítéshez. Ez a mechanizmus a InterruptionToken és a InterruptionTokenSource osztályokon alapul.
Egy InterruptionToken hozzárendelhető a LoadOptions-hez, és átadható a Presentation konstruktorának. Amikor a InterruptionTokenSource.Interrupt() meghívásra kerül, a kapcsolódó hosszú ideig futó feladat megszakad. A cikk bemutatja, hogyan lehet ezt a mechanizmust együtt használni a szabványos .NET CancellationToken-nel a leállítási kérések figyelésével, és a Interrupt() meghívásával, amikor a leállítás kérése érkezik.
Megszakítható Könyvtár
Az Aspose.Slides 18.4 bevezetésével felvettük a InterruptionToken és a InterruptionTokenSource osztályokat. Ezek lehetővé teszik a hosszú ideig futó feladatok, például a deszerializáció, sorosítás és megjelenítés megszakítását.
- InterruptionTokenSource a token(ek) forrása, amely(ek)et a ILoadOptions.InterruptionToken kapja.
- Amikor a ILoadOptions.InterruptionToken be van állítva, és a LoadOptions példány átadásra kerül a Presentation konstruktorába, a InterruptionTokenSource.Interrupt() meghívása megszakítja a hozzá kapcsolódó hosszú ideig futó feladatot.
A következő kódrészlet bemutatja egy futó feladat megszakítását:
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); // a művelet futtatása külön szálon
Thread.Sleep(10000); // időkorlát
tokenSource.Interrupt(); // a konverzió leállítása
}
private static void Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
Task.Run(() => { action(token); });
}
.NET CancellationToken és Megszakítható Könyvtár
Amikor egy CancellationToken használata szükséges az Aspose.Slides Megszakítható könyvtárral együtt, csomagolja be a Presentation feldolgozást, és szakítsa meg a InterruptionToken, ha a CancellationToken.IsCancellationRequested értéke true.
Ez a C# kód bemutatja a működést:
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); // a művelet futtatása külön szálon
while (!task.Wait(500)) // várakozik és figyeli, hogy a cancellationToken.IsCancellationRequested be legyen állítva
{
if (cancellationToken.IsCancellationRequested)
{
Console.WriteLine("Presentation processing was canceled");
tokenSource.Interrupt(); // a Presentation feldolgozásának megszakítása
}
}
}
private static Task Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
return Task.Run(() =>
{
action(token);
});
}
GYIK
Mi a célja az Aspose.Slides megszakítási könyvtárnak?
Ez egy mechanizmust biztosít a hosszú ideig futó műveletek — például a prezentációk betöltése, mentése vagy renderelése — megszakítására, mielőtt befejeződnek. Hasznos, ha a feldolgozási időt korlátozni kell, vagy a feladat már nem szükséges.
Mi a különbség a InterruptionToken és a InterruptionTokenSource?
InterruptionTokenátadásra kerül az Aspose.Slides API-nak, és a hosszú ideig futó műveletek során ellenőrzésre kerül.InterruptionTokenSourcea kódban használatos tokenek létrehozására és a megszakítások kiváltására aInterrupt()meghívásával.
Használhatom a .NET CancellationToken-t a megszakítási könyvtárral?
Igen. Figyelheti a CancellationToken-t az alkalmazás logikájában, és a leállítás kérésére meghívhatja a InterruptionTokenSource.Interrupt()-t. Ez lehetővé teszi, hogy az Aspose.Slides integrálódjon a szabványos .NET leállítási munkafolyamatokkal.
Milyen feladatok szakíthatók meg?
Bármely Aspose.Slides feladat, amely elfogad egy InterruptionToken-t — például egy prezentáció betöltése a Presentation(path, loadOptions) vagy mentése a Presentation.Save(...) segítségével — megszakítható.
A megszakítás azonnal megtörténik?
Nem. A megszakítás együttműködésen alapul: a művelet időről‑időre ellenőrzi a tokent, és akkor áll le, amikor észleli, hogy a Interrupt() meghívásra került.
Mi történik, ha a Interrupt() meghívását egy már befejezett feladat után hajtom végre?
Semmi — a hívás nem lesz hatással, ha a kapcsolódó feladat már befejeződött.
Újra felhasználhatom ugyanazt a InterruptionTokenSource‑t több feladathoz?
Igen — de miután a Interrupt() meghívásra került azon a forráson, az összes, a tokenjeit használó feladat megszakad. Használjon külön tokenforrásokat a feladatok független kezeléséhez.