Kesintiye Uğrayabilen Kütüphane Desteği

Genel Bakış

Aspose.Slides, serileştirme, deseralize etme ve renderleme gibi uzun süren sunum görevleri için kesintiye uğrayabilen bir işleme mekanizması sağlar. Bu mekanizma InterruptionToken ve InterruptionTokenSource sınıflarına dayanır.

InterruptionToken, LoadOptions‘a atanabilir ve Presentation yapıcısına geçirilebilir. InterruptionTokenSource::Interrupt() çağrıldığında, ilgili uzun süren görev kesintiye uğrar.

Kesintiye Uğrayabilen Kütüphane

Aspose.Slides 18.4 sürümünde InterruptionToken ve InterruptionTokenSource sınıflarını tanıttık. Bu sınıflar, serileştirme, deseralize etme ve renderleme gibi uzun süren görevleri kesintiye uğratmanıza olanak tanır.

Aşağıdaki kod parçacığı, çalışan bir görevin nasıl kesintiye uğratılacağını gösterir:

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()); // eylemi ayrı bir iş parçacığında çalıştır
    Threading::Thread::Sleep(10000);       // zaman aşımı
    tokenSource->Interrupt();              // dönüşümü durdur
}

SSS

Aspose.Slides kesinti kütüphanesinin amacı nedir?

Bu, uzun süren işlemleri—sunumları yükleme, kaydetme veya renderleme gibi—tamamlanmadan kesintiye uğratmak için bir mekanizma sağlar. İşlem süresinin sınırlı olması gerektiğinde veya görevin artık gereksiz olduğu durumlarda faydalıdır.

InterruptionToken ve InterruptionTokenSource arasındaki fark nedir?

  • InterruptionToken, Aspose.Slides API’sine geçirilir ve uzun süren işlemler sırasında kontrol edilir.
  • InterruptionTokenSource, kodunuzda token oluşturmak ve Interrupt() çağrısı yaparak kesintileri tetiklemek için kullanılır.

Hangi görevler kesintiye uğrayabilir?

InterruptionToken kabul eden herhangi bir Aspose.Slides görevi—örneğin Presentation(path, loadOptions) ile bir sunumu yüklemek veya Presentation::Save(...) ile kaydetmek—kesintiye uğrayabilir.

Kesinti hemen gerçekleşir mi?

Hayır. Kesinti iş birliğine dayalıdır: işlem periyodik olarak token’ı kontrol eder ve Interrupt() çağrıldığını algıladığı anda durur.

Bir görev zaten tamamlandıktan sonra Interrupt() çağırırsam ne olur?

Hiçbir şey—ilgili görev zaten tamamlanmışsa çağrı hiçbir etki yaratmaz.

Aynı InterruptionTokenSource birden fazla görev için yeniden kullanılabilir mi?

Evet—ancak o kaynakta Interrupt() çağrısından sonra, token’larını kullanan tüm görevler kesintiye uğrar. Görevleri bağımsız yönetmek için ayrı token kaynakları kullanın.