Kesilebilir Kütüphane Desteği

Genel Bakış

Aspose.Slides for .NET, serileştirme, serileştirme ve renderleme gibi uzun süren sunum görevleri için kesilebilir 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ıya geçirilebilir. InterruptionTokenSource.Interrupt() çağrıldığında, ilişkili uzun süren görev kesilir. Makale ayrıca bu mekanizmanın standart .NET CancellationToken ile birlikte nasıl kullanılacağını, iptal isteklerini izleyerek ve iptal istendiğinde Interrupt() çağırarak gösterir.

Kesilebilir Kütüphane

Aspose.Slides 18.4 sürümünde (Aspose.Slides 18.4), InterruptionToken ve InterruptionTokenSource sınıflarını tanıttık. Bu sınıflar, serileştirme, serileştirme ve renderleme gibi uzun süren görevleri kesmenize olanak tanır.

Aşağıdaki kod parçacığı çalışan bir görevi kesmeyi gösterir:

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

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

.NET CancellationToken ve Kesilebilir Kütüphane

Aspose.Slides Kesilebilir kütüphanesiyle birlikte bir CancellationToken kullanmanız gerektiğinde, Presentation işleme sürecini sarmalayıp, CancellationToken.IsCancellationRequested true olduğunda InterruptionToken kesintiye uğratmalısınız.

Bu C# kodu işlemi gösterir:

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); // eylemi ayrı bir iş parçacığında çalıştır

    while (!task.Wait(500)) // bekle ve cancellationToken.IsCancellationRequested'in ayarlanıp ayarlanmadığını izle
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // Presentation işlemini kesintiye uğrat
        }
    }
}

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

FAQ

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

Uzun süren işlemleri—sunumları yükleme, kaydetme veya renderleme gibi—tamamlanmadan kesmenizi sağlayan bir mekanizma sunar. İşlem süresi sınırlı olduğunda veya görev artık gerekmediğinde kullanışlıdır.

InterruptionToken ile 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 kesintiyi tetiklemek için kullanılır.

.NET CancellationToken kesinti kütüphanesiyle birlikte kullanılabilir mi?

Evet. Uygulama mantığınızda CancellationToken‘ı izleyebilir ve iptal istendiğinde InterruptionTokenSource.Interrupt() çağırabilirsiniz. Bu, Aspose.Slides’in standart .NET iptal akışlarıyla bütünleşmesini sağlar.

Hangi görevler kesilebilir?

InterruptionToken kabul eden her Aspose.Slides görevi—örneğin Presentation(path, loadOptions) ile bir sunumu yükleme veya Presentation.Save(...) ile kaydetme—kesilebilir.

Kesinti hemen gerçekleşir mi?

Hayır. Kesinti işbirlikçidir: işlem periyodik olarak tokenı kontrol eder ve Interrupt() çağrıldığını tespit ettiğinde durur.

Bir görev zaten tamamlanmışken Interrupt() çağrılırsa ne olur?

Hiçbir şey olmaz—görev zaten tamamlanmışsa çağrının bir etkisi yoktur.

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

Evet—ancak o kaynak üzerinde Interrupt() çağrısı yapıldığında, tokenlarını kullanan tüm görevler kesilir. Görevleri bağımsız yönetmek için ayrı token kaynakları kullanın.