Wsparcie dla biblioteki obsługującej przerwania

Przegląd

Aspose.Slides udostępnia mechanizm przetwarzania możliwy do przerwania dla długotrwałych zadań związanych z prezentacjami, takich jak deserializacja, serializacja i renderowanie. Mechanizm ten opiera się na klasach InterruptionToken i InterruptionTokenSource.

InterruptionToken może być przypisany do LoadOptions i przekazany do konstruktora Presentation. Gdy wywołane zostanie InterruptionTokenSource::Interrupt(), powiązane długotrwałe zadanie zostaje przerwane.

Biblioteka obsługująca przerwania

W Aspose.Slides 18.4, wprowadziliśmy klasy InterruptionToken oraz InterruptionTokenSource. Umożliwiają one przerwanie długotrwałych zadań, takich jak deserializacja, serializacja i renderowanie.

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()); // uruchom akcję w osobnym wątku
    Threading::Thread::Sleep(10000);       // limit czasu
    tokenSource->Interrupt();              // zatrzymaj konwersję
}

FAQ

Jaki jest cel biblioteki przerywania Aspose.Slides?

Zapewnia mechanizm przerywania długotrwałych operacji — takich jak ładowanie, zapisywanie lub renderowanie prezentacji — przed ich zakończeniem. Jest to przydatne, gdy czas przetwarzania musi być ograniczony lub zadanie nie jest już potrzebne.

Jaka jest różnica między InterruptionToken a InterruptionTokenSource?

  • InterruptionToken jest przekazywany do API Aspose.Slides i sprawdzany podczas długotrwałych operacji.
  • InterruptionTokenSource jest używany w kodzie do tworzenia tokenów i wywoływania przerwań poprzez wywołanie Interrupt().

Jakie zadania mogą być przerywane?

Każde zadanie Aspose.Slides, które przyjmuje InterruptionToken — na przykład ładowanie prezentacji przy użyciu Presentation(path, loadOptions) lub zapisywanie przy użyciu Presentation::Save(...) — może zostać przerwane.

Czy przerwanie następuje natychmiastowo?

Nie. Przerwanie jest współpracy: operacja okresowo sprawdza token i zatrzymuje się, gdy wykryje, że wywołano Interrupt().

Co się stanie, jeśli wywołam Interrupt() po tym, jak zadanie już się zakończyło?

Nic — wywołanie nie ma żadnego skutku, jeśli odpowiednie zadanie już się zakończyło.

Czy mogę ponownie użyć tego samego InterruptionTokenSource dla wielu zadań?

Tak — ale po wywołaniu Interrupt() na tym źródle wszystkie zadania korzystające z jego tokenów zostaną przerwane. Używaj oddzielnych źródeł tokenów, aby zarządzać zadaniami niezależnie.