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.
- InterruptionTokenSource yönlendirilen token(ler)in kaynağıdır ve bu token(ler) ILoadOptions.InterruptionToken üzerinden geçirilir.
- ILoadOptions.InterruptionToken ayarlandığında ve LoadOptions örneği Presentation yapıcıya geçirildiğinde, InterruptionTokenSource.Interrupt() çağrısı o Presentation ile ilişkili herhangi bir uzun süren görevi keser.
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 veInterrupt()ç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.