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.
- InterruptionTokenSource jest źródłem tokenów przekazywanych do ILoadOptions::set_InterruptionToken.
- Gdy ILoadOptions::set_InterruptionToken jest ustawione i instancja LoadOptions zostaje przekazana do konstruktora Presentation, wywołanie InterruptionTokenSource::Interrupt() przerywa każde długotrwałe zadanie powiązane z tym Presentation.
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?
InterruptionTokenjest przekazywany do API Aspose.Slides i sprawdzany podczas długotrwałych operacji.InterruptionTokenSourcejest używany w kodzie do tworzenia tokenów i wywoływania przerwań poprzez wywołanieInterrupt().
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.