Unterstützung für die Interruptable-Bibliothek
Interruptable Bibliothek
In Aspose.Slides 18.4, haben wir die Klassen InterruptionToken und InterruptionTokenSource eingeführt. Sie ermöglichen das Unterbrechen von langlaufenden Aufgaben wie Deserialisierung, Serialisierung und Rendering.
- InterruptionTokenSource ist die Quelle der(s) Token(s), die an ILoadOptions::set_InterruptionToken übergeben werden.
- Wenn ILoadOptions::set_InterruptionToken gesetzt ist und die LoadOptions‑Instanz an den Presentation‑Konstruktor übergeben wird, unterbricht das Aufrufen von InterruptionTokenSource::Interrupt() jede langlaufende Aufgabe, die mit dieser Presentation verknüpft ist.
Der folgende Codeabschnitt demonstriert das Unterbrechen einer laufenden Aufgabe:
void Run(Action<SharedPtr<IInterruptionToken>> action, SharedPtr<IInterruptionToken> token)
{
auto threadFunction = std::function<void()>([&action, &token]() -> void
{
action(token);
});
auto thread = System::MakeObject<Threading::Thread>(threadFunction);
thread->Start();
}
void Run()
{
String dataDir = GetDataPath();
auto function = std::function<void(SharedPtr<IInterruptionToken> token)> ([&dataDir](SharedPtr<IInterruptionToken> token) -> void
{
auto options = System::MakeObject<LoadOptions>();
options->set_InterruptionToken(token);
auto presentation = System::MakeObject<Presentation>(dataDir + u"sample.pptx", options);
presentation->Save(dataDir + u"sample.ppt", Export::SaveFormat::Ppt);
});
auto action = System::Action<SharedPtr<IInterruptionToken>>(function);
auto tokenSource = System::MakeObject<InterruptionTokenSource>();
Run(action, tokenSource->get_Token()); // führt die Aktion in einem separaten Thread aus
Threading::Thread::Sleep(10000); // Zeitlimit
tokenSource->Interrupt(); // stoppt die Konvertierung
}
FAQ
Was ist der Zweck der Aspose.Slides Interrupt-Bibliothek?
Sie bietet einen Mechanismus, um langlaufende Vorgänge – wie das Laden, Speichern oder Rendern von Präsentationen – vor dem Abschluss zu unterbrechen. Dies ist nützlich, wenn die Verarbeitungszeit begrenzt werden muss oder die Aufgabe nicht mehr benötigt wird.
Was ist der Unterschied zwischen InterruptionToken und InterruptionTokenSource?
InterruptionTokenwird an die Aspose.Slides‑API übergeben und während langlaufender Vorgänge überprüft.InterruptionTokenSourcewird in Ihrem Code verwendet, um Token zu erstellen und Unterbrechungen auszulösen, indemInterrupt()aufgerufen wird.
Welche Aufgaben können unterbrochen werden?
Jede Aspose.Slides‑Aufgabe, die ein InterruptionToken akzeptiert – z. B. das Laden einer Präsentation mit Presentation(path, loadOptions) oder das Speichern mit Presentation::Save(...) – kann unterbrochen werden.
Geschieht die Unterbrechung sofort?
Nein. Die Unterbrechung ist kooperativ: Der Vorgang prüft das Token periodisch und stoppt, sobald er erkennt, dass Interrupt() aufgerufen wurde.
Was passiert, wenn ich Interrupt() aufrufe, nachdem eine Aufgabe bereits abgeschlossen ist?
Nichts – der Aufruf hat keine Wirkung, wenn die entsprechende Aufgabe bereits abgeschlossen ist.
Kann ich dieselbe InterruptionTokenSource für mehrere Aufgaben wiederverwenden?
Ja – jedoch werden nach dem Aufruf von Interrupt() auf dieser Quelle alle Aufgaben, die deren Token verwenden, unterbrochen. Verwenden Sie separate Token‑Quellen, um Aufgaben unabhängig zu verwalten.