Iron Software Kütüphaneleri ile C# CancellationToken Kullanımı
Modern .NET geliştiricileri, IronPDF, IronOCR, IronWord ve IronXL gibi kütüphaneleri entegre ederken sıklıkla eşzamanlı olmayan programlamayla çalışır. Bu ürünler genellikle PDF oluşturma, OCR içeriği işleme veya büyük elektronik tablolar oluşturma gibi uzun süreli görevler çalıştırır ve uygulamaların yanıt vermeye devam etmesini sağlamanın doğru yolu C# CancellationToken tabanlı iptal kullanmaktır.
Bu makale, iptal tokenlerini nasıl kullanacağınızı, bir yöntemin bir token alması, görev iptalini nasıl ele alınacağını ve bu modelleri Iron Software kütüphaneleriyle uygun ve zamanında nasıl entegre edeceğinizi açıklar. Ayrıca en iyi uygulamaları, kaynak yönetimini, ve birden fazla İptal Tokeni'ni eşzamanlı olarak nasıl kullanacağımızı ele alıyoruz.
Iron Software İş Yüklerinde İptal İsteklerinin Önemi

Iron Software araçları sıkça asenkron işlemler çalıştırır - örneğin:
- Bir IronPDF HTML-to-PDF dönüşümü
- Bir IronOCR uzun süreli OCR çıkarımı
- Arka Plan Hizmetleri içinde bir IronWord veya IronXL belgesi oluşturma
- PDF oluşturma öncesi büyük bir HttpClient web isteği
Bunlar, bir kullanıcı İptal düğmesine bastığında, başka bir sayfaya geçtiğinde veya çağrılan kod bir İptal İsteği gönderdiğinde nazikçe sonlandırılması gereken uzun süreli işlemler olabilir.
İptal tokenlerini kullanmak şunları sağlar:
- Duyarlı uygulamalar
- Daha iyi kaynak yönetimi
- Yönetilmeyen kaynakların kontrollü salıverilmesi
- Temiz bir işbirlikli iptal modeli
C# CancellationToken Temellerini Anlamak
C#, bir İptalToken token oluşturan CancellationTokenSource sınıfını sağlar. Bir CTS new CancellationTokenSource() , asenkron yöntemlere iletilecek bir token oluşturabilir.
var cts = new CancellationTokenSource();
CancellationToken token = cts.Token;var cts = new CancellationTokenSource();
CancellationToken token = cts.Token;Dim cts As New CancellationTokenSource()
Dim token As CancellationToken = cts.TokenBir token, bir yöntem parametresi kullanılarak iletilir:
public async Task ProcessPdfAsync(string html, CancellationToken token)public async Task ProcessPdfAsync(string html, CancellationToken token)Public Async Function ProcessPdfAsync(html As String, token As CancellationToken) As TaskYöntem içinde periyodik olarak kontrol edersiniz:
token.ThrowIfCancellationRequested();token.ThrowIfCancellationRequested();token.ThrowIfCancellationRequested()veya IsCancellationRequested özelliğini inceleyin:
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested.");
return;
}if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested.");
return;
}If token.IsCancellationRequested Then
Console.WriteLine("Cancellation requested.")
Return
End IfBu, işlemin iptal edilen olayının yalnızca kodunuz tokeni kontrol ettiğinde gerçekleştiği ortak bir iptal modeli sağlar.
IronPDF ile CancellationToken Kullanımı
IronPDF'nin HTML işleme bileşeni eşzamanlı olmayan programlama için tasarlanmıştır, bu nedenle iptali doğallıkla entegre edebilirsiniz.
public async Task<PdfDocument> BuildPdfAsync(string html, CancellationToken token)
{
Console.WriteLine("\n[Generator] Starting PDF rendering process...");
var renderer = new ChromePdfRenderer();
token.ThrowIfCancellationRequested();
Console.WriteLine("[Generator] Simulating a 2-second delay...");
await Task.Delay(2000, token);
token.ThrowIfCancellationRequested();
Console.WriteLine("[Generator] Delay complete. Starting actual rendering...");
// This is the working overload for your library version
return await renderer.RenderHtmlAsPdfAsync(html);
}public async Task<PdfDocument> BuildPdfAsync(string html, CancellationToken token)
{
Console.WriteLine("\n[Generator] Starting PDF rendering process...");
var renderer = new ChromePdfRenderer();
token.ThrowIfCancellationRequested();
Console.WriteLine("[Generator] Simulating a 2-second delay...");
await Task.Delay(2000, token);
token.ThrowIfCancellationRequested();
Console.WriteLine("[Generator] Delay complete. Starting actual rendering...");
// This is the working overload for your library version
return await renderer.RenderHtmlAsPdfAsync(html);
}Imports System
Imports System.Threading
Imports System.Threading.Tasks
Public Class PdfGenerator
Public Async Function BuildPdfAsync(html As String, token As CancellationToken) As Task(Of PdfDocument)
Console.WriteLine(vbCrLf & "[Generator] Starting PDF rendering process...")
Dim renderer As New ChromePdfRenderer()
token.ThrowIfCancellationRequested()
Console.WriteLine("[Generator] Simulating a 2-second delay...")
Await Task.Delay(2000, token)
token.ThrowIfCancellationRequested()
Console.WriteLine("[Generator] Delay complete. Starting actual rendering...")
' This is the working overload for your library version
Return Await renderer.RenderHtmlAsPdfAsync(html)
End Function
End ClassÖrnek Konsol Çıkışı

Bu, birden fazla noktada iptali destekleyen genel bir async Görevi gösterir. İptal gerçekleştiğinde, yöntem bir OperationCanceledException fırlatır ve bu durumu bir catch bloğunda ele alırsınız.
IronOCR ile CancellationToken Kullanımı
IronOCR'nin görüntü tarama gibi uzun süreli işlemi de dahili bir CancellationToken'dan yararlanır:
public class OcrProcessor
{
private readonly IronOcr.IronTesseract ocr = new IronOcr.IronTesseract();
public async Task<string> ExtractTextAsync(string path, CancellationToken token)
{
// Check for cancellation immediately upon entering the method.
token.ThrowIfCancellationRequested();
// Run the synchronous OCR method on a background thread.
// This is the correct pattern for cancellable synchronous wrappers.
return await Task.Run(() => ocr.Read(path).Text, token);
}
}public class OcrProcessor
{
private readonly IronOcr.IronTesseract ocr = new IronOcr.IronTesseract();
public async Task<string> ExtractTextAsync(string path, CancellationToken token)
{
// Check for cancellation immediately upon entering the method.
token.ThrowIfCancellationRequested();
// Run the synchronous OCR method on a background thread.
// This is the correct pattern for cancellable synchronous wrappers.
return await Task.Run(() => ocr.Read(path).Text, token);
}
}Imports System.Threading
Imports System.Threading.Tasks
Imports IronOcr
Public Class OcrProcessor
Private ReadOnly ocr As New IronTesseract()
Public Async Function ExtractTextAsync(path As String, token As CancellationToken) As Task(Of String)
' Check for cancellation immediately upon entering the method.
token.ThrowIfCancellationRequested()
' Run the synchronous OCR method on a background thread.
' This is the correct pattern for cancellable synchronous wrappers.
Return Await Task.Run(Function() ocr.Read(path).Text, token)
End Function
End ClassÖrnek Çıktı

IronWord belge oluşturma ve IronXL tablo düzenleme aynı şekilde çalışır. Bu işlemlerin hepsi iptal edilebilir olduğundan işbirlikçi iptal modeli, UI thread'lerini veya Arka Plan Servislerini engellemekten kaçınır.
Uzun İşlemlerde İptali Düzenli Olarak Kontrol Etme
Yaygın bir model döngü kurup iptali kontrol etmektir:
public async Task LongRunningOperation(CancellationToken token)
{
for (int i = 0; i < 1000; i++)
{
token.ThrowIfCancellationRequested();
await Task.Delay(10, token); // await Task.Delay helps cooperative cancellation
}
}public async Task LongRunningOperation(CancellationToken token)
{
for (int i = 0; i < 1000; i++)
{
token.ThrowIfCancellationRequested();
await Task.Delay(10, token); // await Task.Delay helps cooperative cancellation
}
}Imports System.Threading
Imports System.Threading.Tasks
Public Async Function LongRunningOperation(token As CancellationToken) As Task
For i As Integer = 0 To 999
token.ThrowIfCancellationRequested()
Await Task.Delay(10, token) ' Await Task.Delay helps cooperative cancellation
Next
End FunctionBu, iptal taleplerinin uygun ve zamanında ele alınmasını sağlar ve sistemin döngüleri boşa harcamadığından emin olur.
IronPDF Oluşumundan Önce HttpClient ile CancellationToken Kullanımı
Bir PDF oluşturmadan önce HTML almak için web isteği gerçekleştirildiğinde her zaman belirteci iletin:
var client = new HttpClient();
public async Task<string> FetchHtmlAsync(string url, CancellationToken token)
{
var response = await client.GetAsync(url, token);
if (!response.IsSuccessStatusCode)
throw new Exception("Error occurred while requesting content.");
return await response.Content.ReadAsStringAsync(token);
}var client = new HttpClient();
public async Task<string> FetchHtmlAsync(string url, CancellationToken token)
{
var response = await client.GetAsync(url, token);
if (!response.IsSuccessStatusCode)
throw new Exception("Error occurred while requesting content.");
return await response.Content.ReadAsStringAsync(token);
}Imports System.Net.Http
Imports System.Threading
Imports System.Threading.Tasks
Dim client As New HttpClient()
Public Async Function FetchHtmlAsync(url As String, token As CancellationToken) As Task(Of String)
Dim response = Await client.GetAsync(url, token)
If Not response.IsSuccessStatusCode Then
Throw New Exception("Error occurred while requesting content.")
End If
Return Await response.Content.ReadAsStringAsync(token)
End FunctionBu, kullanıcının sayfadan ayrılması durumunda HttpClient'in zamanında iptali sağlamasını sağlar.
.NET Core Arka Plan Servislerinde İptal
.NET Core Arka Plan Servisleri, ExecuteAsync metoduna otomatik olarak iletilen bir içsel CancellationToken içerir. Iron Software araçları çalıştırırken kullanın:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await ProcessPdfAsync("<h1>Hello</h1>", stoppingToken);
await Task.Delay(5000, stoppingToken);
}
}protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await ProcessPdfAsync("<h1>Hello</h1>", stoppingToken);
await Task.Delay(5000, stoppingToken);
}
}Protected Overrides Async Function ExecuteAsync(stoppingToken As CancellationToken) As Task
While Not stoppingToken.IsCancellationRequested
Await ProcessPdfAsync("<h1>Hello</h1>", stoppingToken)
Await Task.Delay(5000, stoppingToken)
End While
End FunctionBu, sunucu tarafı uzun süreli görevler için genel bir modeldir.
Iron Software ile İptal Belirteçlerini Kullanma Konusunda En İyi Uygulamalar
Her zaman async metodlara CancellationToken geçirin.
Döngüler içinde ThrowIfCancellationRequested kullanın.
Sıkı döngüler yerine await Task.Delay tercih edin.
Belirteçleri LinkedTokenSource ile birleştirin.
Her zaman OperationCanceledException'ı işleyin.
Daha iyi kaynak yönetimi ve duyarlı uygulamalar için iptali kullanın.
- C#'ın nesne yönelimli bir programlama dili olduğunu unutmayın, bu nedenle iptal yönteminiz ve iptal mantığınız temiz olmalıdır.
Görev İptali İçin İleri Seviye Hususlar
Bu, herhangi bir .NET geliştirici için iyi bir makale olduğundan emin olmak için kalan ilgili terminolojiyi güçlendiren en iyi uygulamaları içeren kısa bir ek bölüm.
C#'ta görev iptali otomatik değildir; yönteminizin içinde uygulanan iptal mantığına bağlıdır. Belirteç özelliği kontrol edilmeli ve tüketicilere döndürülen belirteç, işlemin iptal edilip edilmediğini veya başarıyla tamamlanıp tamamlanmadığını belirlemelerini sağamalıdır. Bir istek tamamlanamazsa bile, sistem uygun ve zamanında bir şekilde zarif bir şekilde sonlanmalıdır.
Bir kullanıcı arayüzü iptal düğmesini tetiklediğinde, CancellationTokenSource üzerindeki iptal yöntemi iptal sinyali verir ve kodunuz, token.IsCancellationRequested aracılığıyla periyodik olarak kontrol etmelidir. İşlemin iptali olayları meydana geldiğinde, kaynakları serbest bırakırsınız ve kontrolü çağırıcıya geri verirsiniz.
Derinlemesine yerleştirilmiş belgeleri taramak gibi uzun süreli bir işlem olan IronOCR taraması veya devasa elektronik tablolar oluşturan IronXL, her katmanda CancellationToken geçirerek yapılmalıdır. Kullanıcı sayfadan uzaklaştığında, işlem temiz bir şekilde sona ermelidir.
Iron Software ürünleri bunu daha kolay hale getirir çünkü .NET asenkron programlama modelini doğal olarak takip ederler. Kendi kütüphanelerinizi yazarken, tüketicilerinizin bellek sızıntısı yapmadan veya yönetilmeyen kaynakları tutmadan işlemleri zamanında iptal etmelerini sağlayacak aynı en iyi uygulamaları takip etmeyi düşünün.
Sonuç
IronPDF, IronOCR, IronWord ve IronXL ile C# CancellationToken kullanmak, uygulamaları yanıt veren, verimli ve sağlam tutan ortak bir iptal yaklaşımı sağlar. Eşzamanlı olmayan programlamada en iyi uygulamaları uygulayarak, async görevlere token geçirerek ve periyodik olarak iptal kontrolü yaparak, hızlı, güvenli ve daha bakımı kolay .NET uygulamaları oluşturabilirsiniz ve gerektiğinde nazikçe sonlandırabilirsiniz.
