Dukungan untuk Perpustakaan yang Dapat Diinterupsi
Gambaran Umum
Aspose.Slides menyediakan mekanisme pemrosesan yang dapat diinterupsi untuk tugas presentasi yang berjalan 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.
Perpustakaan yang Dapat Diinterupsi
Pada Aspose.Slides 18.4, kami memperkenalkan kelas InterruptionToken dan InterruptionTokenSource. Kedua kelas ini memungkinkan Anda menginterupsi tugas yang berjalan lama seperti deserialisasi, serialisasi, dan rendering.
- InterruptionTokenSource adalah sumber token yang diteruskan ke ILoadOptions::set_InterruptionToken.
- Ketika ILoadOptions::set_InterruptionToken diatur dan instance LoadOptions diteruskan ke konstruktor Presentation, pemanggilan InterruptionTokenSource::Interrupt() akan menginterupsi tugas yang berjalan lama yang terkait dengan Presentation tersebut.
Potongan kode berikut memperlihatkan cara menginterupsi tugas yang sedang berjalan:
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()); // jalankan aksi di thread terpisah
Threading::Thread::Sleep(10000); // batas waktu
tokenSource->Interrupt(); // hentikan konversi
}
FAQ
Apa tujuan perpustakaan interrupt 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 tersebut tidak lagi diperlukan.
Apa perbedaan antara InterruptionToken dan InterruptionTokenSource?
InterruptionTokenditeruskan ke API Aspose.Slides dan diperiksa selama operasi yang memakan waktu lama.InterruptionTokenSourcedigunakan dalam kode Anda untuk membuat token dan memicu interupsi dengan memanggilInterrupt().
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 secara langsung?
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 tersebut 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.