Dukungan Untuk Perpustakaan yang Dapat Diinterupsi

Ikhtisar

Aspose.Slides untuk .NET menyediakan mekanisme pemrosesan yang dapat diinterupsi untuk tugas presentasi yang memakan waktu lama, seperti deserialisasi, serialisasi, dan rendering. Mekanisme ini didasarkan pada kelas InterruptionToken dan InterruptionTokenSource.

InterruptionToken dapat ditetapkan ke LoadOptions dan diteruskan ke konstruktor Presentation. Ketika InterruptionTokenSource.Interrupt() dipanggil, tugas yang berjalan lama terkait akan diinterupsi. Artikel ini juga menunjukkan cara menggunakan mekanisme ini bersamaan dengan CancellationToken standar .NET dengan memantau permintaan pembatalan dan memanggil Interrupt() ketika pembatalan diminta.

Perpustakaan yang Dapat Diinterupsi

Di Aspose.Slides 18.4, kami memperkenalkan kelas InterruptionToken dan InterruptionTokenSource. Mereka memungkinkan Anda menginterupsi tugas yang berjalan lama seperti deserialisasi, serialisasi, dan rendering.

Potongan kode berikut menunjukkan cara menginterupsi tugas yang sedang berjalan:

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); // jalankan aksi dalam thread terpisah
    Thread.Sleep(10000);            // batas waktu
    tokenSource.Interrupt();        // hentikan konversi
}

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

CancellationToken .NET dan Perpustakaan yang Dapat Diinterupsi

Ketika Anda perlu menggunakan CancellationToken bersama dengan perpustakaan Interupsi Aspose.Slides, bungkus pemrosesan Presentation dan interupsi InterruptionToken ketika CancellationToken.IsCancellationRequested bernilai true.

Kode C# berikut menunjukkan operasinya:

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); // jalankan aksi dalam thread terpisah

    while (!task.Wait(500)) // tunggu dan pantau apakah cancellationToken.IsCancellationRequested telah diatur
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // hentikan pemrosesan Presentation
        }
    }
}

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

FAQ

Apa tujuan perpustakaan interupsi Aspose.Slides?

Ia menyediakan mekanisme untuk menginterupsi operasi yang memakan waktu lama—seperti memuat, menyimpan, atau merender presentasi—sebelum selesai. Hal ini berguna ketika waktu pemrosesan harus dibatasi atau tugas tidak lagi diperlukan.

Apa perbedaan antara InterruptionToken dan InterruptionTokenSource?

  • InterruptionToken diteruskan ke API Aspose.Slides dan diperiksa selama operasi yang memakan waktu lama.
  • InterruptionTokenSource digunakan dalam kode Anda untuk membuat token dan memicu interupsi dengan memanggil Interrupt().

Bisakah saya menggunakan .NET CancellationToken dengan perpustakaan interupsi?

Ya. Anda dapat memantau CancellationToken dalam logika aplikasi Anda dan memanggil InterruptionTokenSource.Interrupt() ketika pembatalan diminta. Ini memungkinkan Aspose.Slides untuk berintegrasi dengan alur kerja pembatalan standar .NET.

Tugas apa yang dapat diinterupsi?

Setiap tugas Aspose.Slides yang menerima InterruptionToken—seperti memuat presentasi dengan Presentation(path, loadOptions) atau menyimpan dengan Presentation.Save(...)—dapat diinterupsi.

Apakah interupsi terjadi segera?

Tidak. Interupsi bersifat kooperatif: operasi secara berkala memeriksa token dan berhenti segera setelah mendeteksi bahwa Interrupt() telah dipanggil.

Apa yang terjadi jika saya memanggil Interrupt() setelah tugas selesai?

Tidak ada apa‑apa—pemanggilan tidak berpengaruh jika tugas yang bersangkutan sudah selesai.

Bisakah saya menggunakan kembali InterruptionTokenSource yang sama untuk beberapa tugas?

Ya—tetapi setelah Anda memanggil Interrupt() pada sumber tersebut, semua tugas yang menggunakan tokennya akan diinterupsi. Gunakan sumber token terpisah untuk mengelola tugas secara independen.