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.

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?

  • InterruptionToken wird an die Aspose.Slides‑API übergeben und während langlaufender Vorgänge überprüft.
  • InterruptionTokenSource wird in Ihrem Code verwendet, um Token zu erstellen und Unterbrechungen auszulösen, indem Interrupt() 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.