Support pour la bibliothèque interruptable
Bibliothèque interruptable
Dans Aspose.Slides 18.4, nous avons introduit les classes InterruptionToken et InterruptionTokenSource. Elles vous permettent d’interrompre les tâches de longue durée telles que la désérialisation, la sérialisation et le rendu.
- InterruptionTokenSource est la source des jetons transmis à ILoadOptions::set_InterruptionToken.
- Lorsque ILoadOptions::set_InterruptionToken est défini et que l’instance de LoadOptions est passée au constructeur de Presentation, appeler InterruptionTokenSource::Interrupt() interrompt toute tâche de longue durée associée à cette Presentation.
Le fragment de code suivant montre comment interrompre une tâche en cours :
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()); // exécuter l'action dans un thread séparé
Threading::Thread::Sleep(10000); // délai d'attente
tokenSource->Interrupt(); // arrêter la conversion
}
FAQ
Quel est le but de la bibliothèque d’interruption Aspose.Slides ?
Elle fournit un mécanisme permettant d’interrompre les opérations de longue durée—telles que le chargement, l’enregistrement ou le rendu de présentations—avant qu’elles ne soient terminées. Cela est utile lorsque le temps de traitement doit être limité ou que la tâche n’est plus nécessaire.
Quelle est la différence entre InterruptionToken et InterruptionTokenSource ?
InterruptionTokenest transmis à l’API Aspose.Slides et vérifié pendant les opérations de longue durée.InterruptionTokenSourceest utilisé dans votre code pour créer des jetons et déclencher des interruptions en appelantInterrupt().
Quelles tâches peuvent être interrompues ?
Toute tâche Aspose.Slides qui accepte un InterruptionToken—comme le chargement d’une présentation avec Presentation(path, loadOptions) ou l’enregistrement avec Presentation::Save(...)—peut être interrompue.
L’interruption se produit‑elle immédiatement ?
Non. L’interruption est collaborative : l’opération vérifie périodiquement le jeton et s’arrête dès qu’elle détecte que Interrupt() a été appelé.
Que se passe‑t‑il si j’appelle Interrupt() après qu’une tâche soit déjà terminée ?
Rien — l’appel n’a aucun effet si la tâche correspondante est déjà terminée.
Puis‑je réutiliser le même InterruptionTokenSource pour plusieurs tâches ?
Oui — mais après avoir appelé Interrupt() sur cette source, toutes les tâches utilisant ses jetons seront interrompues. Utilisez des sources de jetons distinctes pour gérer les tâches de manière indépendante.