Υποστήριξη για τη Βιβλιοθήκη Διακοπής

Επισκόπηση

Η Aspose.Slides παρέχει έναν μηχανισμό επεξεργασίας με διακοπές για εργασίες παρουσίασης μεγάλου χρόνου, όπως αποσειριοποίηση, σειριοποίηση και απόδοση. Αυτός ο μηχανισμός βασίζεται στις κλάσεις InterruptionToken και InterruptionTokenSource.

Ένα InterruptionToken μπορεί να εκχωρηθεί στο LoadOptions και να περάσει στον κατασκευαστή Presentation. Όταν κληθεί το InterruptionTokenSource::Interrupt(), η σχετική εργασία μεγάλου χρόνου διακόπτεται.

Βιβλιοθήκη Διακοπής

Στην Aspose.Slides 18.4, εισάγαμε τις κλάσεις InterruptionToken και InterruptionTokenSource. Σας επιτρέπουν να διακόπτετε εργασίες μεγάλου χρόνου όπως αποσειριοποίηση, σειριοποίηση και απόδοση.

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 για να διαχειρίζεστε τις εργασίες ανεξάρτητα.