Wsparcie dla Biblioteki Przerywalnej

Przegląd

Aspose.Slides dla .NET udostępnia mechanizm przetwarzania z możliwością przerwania dla długotrwałych zadań prezentacji, 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. Artykuł pokazuje również, jak używać tego mechanizmu razem ze standardowym tokenem .NET CancellationToken, monitorując żądania anulowania i wywołując Interrupt(), gdy anulowanie zostanie zgłoszone.

Biblioteka przerywalna

W Aspose.Slides 18.4 wprowadziliśmy klasy InterruptionToken i InterruptionTokenSource. Pozwalają one przerywać długotrwałe zadania, takie jak deserializacja, serializacja i renderowanie.

Poniższy fragment kodu demonstruje przerywanie uruchomionego zadania:

public static void Run()
{
    Action<IInterruptionToken> action = (IInterruptionToken token) =>
    {
        LoadOptions options = new LoadOptions { InterruptionToken = token };
        using (Presentation presentation = new Presentation("sample.pptx", options))
        {
            presentation.Save("sample.ppt", SaveFormat.Ppt);
        }
    };

    InterruptionTokenSource tokenSource = new InterruptionTokenSource();
    Run(action, tokenSource.Token); // uruchom akcję w osobnym wątku
    Thread.Sleep(10000);            // limit czasu
    tokenSource.Interrupt();        // zatrzymaj konwersję
}

private static void Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
    Task.Run(() => { action(token); });
}

CancellationToken .NET i biblioteka przerywalna

Gdy potrzebujesz używać CancellationToken razem z biblioteką przerywalną Aspose.Slides, opakuj przetwarzanie Presentation i przerywaj InterruptionToken, gdy CancellationToken.IsCancellationRequested jest true.

Ten kod C# demonstruje działanie:

public static void Main()
{
    CancellationTokenSource tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(20));
    ProcessPresentation("sample.pptx", "sample.pdf", tokenSource.Token);
}

static void ProcessPresentation(string path, string outPath, CancellationToken cancellationToken)
{
    Action<IInterruptionToken> action = (IInterruptionToken token) =>
    {
        LoadOptions options = new LoadOptions {InterruptionToken = token};
        using (Presentation presentation = new Presentation(path, options))
        {
            presentation.Save(outPath, SaveFormat.Pdf);
        }
    };
    
    InterruptionTokenSource tokenSource = new InterruptionTokenSource();
    Task task = Run(action, tokenSource.Token); // uruchom akcję w osobnym wątku

    while (!task.Wait(500)) // czekaj i monitoruj, czy cancellationToken.IsCancellationRequested jest ustawiony
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // przerwij przetwarzanie prezentacji
        }
    }
}

private static Task Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
    return Task.Run(() =>
    {
        action(token);
    });
}

FAQ

Jaki jest cel biblioteki przerywalnej Aspose.Slides?

Zapewnia mechanizm umożliwiający przerwanie 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 interfejsu API Aspose.Slides i sprawdzany podczas długotrwałych operacji.
  • InterruptionTokenSource jest używany w Twoim kodzie do tworzenia tokenów i wywoływania przerwań poprzez wywołanie Interrupt().

Czy mogę używać .NET CancellationToken z biblioteką przerywalną?

Tak. Możesz monitorować CancellationToken w logice aplikacji i wywoływać InterruptionTokenSource.Interrupt(), gdy zostanie zgłoszone anulowanie. Umożliwia to integrację Aspose.Slides ze standardowymi przepływami anulowania w .NET.

Jakie zadania można przerwać?

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

Czy przerwanie następuje natychmiast?

Nie. Przerwanie jest współpracujące: 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 efektu, jeśli odpowiadające mu zadanie już zostało zakończone.

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

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