Υποστήριξη για τη Βιβλιοθήκη Διακοπής
Επισκόπηση
Η Aspose.Slides παρέχει έναν μηχανισμό επεξεργασίας με διακοπές για εργασίες παρουσίασης μεγάλου χρόνου, όπως αποσειριοποίηση, σειριοποίηση και απόδοση. Αυτός ο μηχανισμός βασίζεται στις κλάσεις InterruptionToken και InterruptionTokenSource.
Ένα InterruptionToken μπορεί να εκχωρηθεί στο LoadOptions και να περάσει στον κατασκευαστή Presentation. Όταν κληθεί το InterruptionTokenSource::Interrupt(), η σχετική εργασία μεγάλου χρόνου διακόπτεται.
Βιβλιοθήκη Διακοπής
Στην Aspose.Slides 18.4, εισάγαμε τις κλάσεις InterruptionToken και InterruptionTokenSource. Σας επιτρέπουν να διακόπτετε εργασίες μεγάλου χρόνου όπως αποσειριοποίηση, σειριοποίηση και απόδοση.
- InterruptionTokenSource είναι η πηγή του(των) token(s) που περνιούνται στο ILoadOptions::set_InterruptionToken.
- Όταν το ILoadOptions::set_InterruptionToken οριστεί και η παρουσία LoadOptions περάσει στον κατασκευαστή Presentation, η κλήση του InterruptionTokenSource::Interrupt() διακόπτει οποιαδήποτε εργασία μεγάλου χρόνου που σχετίζεται με αυτό το 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()); // εκτελεί τη δράση σε ξεχωριστό νήμα
Threading::Thread::Sleep(10000); // χρονικό όριο
tokenSource->Interrupt(); // σταματά τη μετατροπή
}
Συχνές ερωτήσεις
Ποιος είναι ο σκοπός της βιβλιοθήκης διακοπής της Aspose.Slides;
Παρέχει έναν μηχανισμό για τη διακοπή λειτουργιών μεγάλης διάρκειας — όπως η φόρτωση, η αποθήκευση ή η απόδοση παρουσιάσεων — πριν ολοκληρωθούν. Αυτό είναι χρήσιμο όταν πρέπει να περιοριστεί ο χρόνος επεξεργασίας ή όταν η εργασία δεν χρειάζεται πλέον.
Ποια είναι η διαφορά μεταξύ InterruptionToken και InterruptionTokenSource;
InterruptionTokenπερνιέται στο API της Aspose.Slides και ελέγχεται κατά τη διάρκεια των λειτουργιών μεγάλης διάρκειας.InterruptionTokenSourceχρησιμοποιείται στον κώδικά σας για τη δημιουργία token και την έναρξη διακοπών καλώντας τοInterrupt().
Ποιες εργασίες μπορούν να διακοπούν;
Οποιαδήποτε εργασία της Aspose.Slides που δέχεται ένα InterruptionToken — όπως η φόρτωση μιας παρουσίασης με Presentation(path, loadOptions) ή η αποθήκευση με Presentation::Save(...) — μπορεί να διακοπεί.
Συμβαίνει η διακοπή αμέσως;
Όχι. Η διακοπή είναι συνεργατική: η λειτουργία ελέγχει περιοδικά το token και σταματά αμέσως μόλις εντοπίσει ότι το Interrupt() έχει κληθεί.
Τι συμβαίνει αν καλέσω το Interrupt() αφού η εργασία έχει ήδη ολοκληρωθεί;
Τίποτα — η κλήση δεν έχει κανένα αποτέλεσμα εάν η αντίστοιχη εργασία έχει ήδη ολοκληρωθεί.
Μπορώ να επαναχρησιμοποιήσω το ίδιο InterruptionTokenSource για πολλαπλές εργασίες;
Ναι — αλλά αφού καλέσετε το Interrupt() σε αυτήν την πηγή, όλες οι εργασίες που χρησιμοποιούν τα tokens της θα διακοπούν. Χρησιμοποιήστε ξεχωριστές πηγές token για να διαχειρίζεστε τις εργασίες ανεξάρτητα.