Iron Software 라이브러리와 함께 C# CancellationToken 사용하기
현대 .NET 개발자는 IronPDF, IronOCR, IronWord, IronXL와 같은 라이브러리를 통합할 때 종종 비동기 프로그래밍을 사용합니다. 이들 제품은 자주 긴 작업을 수행하는데, 예를 들어 PDF 렌더링, OCR 콘텐츠 처리 또는 대형 스프레드시트 생성이 있습니다. 애플리케이션의 응답성을 유지하는 올바른 방법은 C# CancellationToken 기반 취소를 사용하는 것입니다.
이 글은 취소 토큰을 사용하는 방법, 메서드가 토큰을 받는 방법, 작업 취소를 처리하는 방법, 이 패턴을 Iron Software 라이브러리와 적절하고 시기 적절하게 통합하는 방법을 설명합니다. 또한 모범 사례, 리소스 관리, 여러 CancellationTokens를 동시에 사용하는 방법에 대해 다룹니다.
Iron Software 작업 부하에서 취소 요청이 중요한 이유

Iron Software 도구는 종종 비동기 작업을 실행합니다 - 예를 들어:
- IronPDF HTML-to-PDF 변환
- IronOCR의 긴 OCR 추출
- IronWord 또는 IronXL 문서는 백그라운드 서비스 내에서 빌드
- PDF 생성 전 대규모 HttpClient 웹 요청
이들은 사용자가 취소 버튼을 클릭하거나 탐색을 벗어나거나 호출 코드가 CancellationRequest를 발행할 때 부드럽게 종료해야 하는 긴 작업일 수 있습니다.
취소 토큰을 사용하여 보장됩니다:
- 반응형 애플리케이션
- 더 나은 리소스 관리
- 비관리 리소스의 제어된 해제
- 깨끗한 협력적 취소 모델
C# CancellationToken 기본 이해
C#은 CancellationToken 토큰을 생성하는 CancellationTokenSource 클래스를 제공합니다. CTS new CancellationTokenSource()는 비동기 메서드에 전달되는 토큰을 생성할 수 있습니다.
var cts = new CancellationTokenSource();
CancellationToken token = cts.Token;var cts = new CancellationTokenSource();
CancellationToken token = cts.Token;토큰은 메서드 매개변수를 사용하여 전달됩니다:
public async Task ProcessPdfAsync(string html, CancellationToken token)public async Task ProcessPdfAsync(string html, CancellationToken token)메서드 내부에서 주기적으로 확인하세요:
token.ThrowIfCancellationRequested();token.ThrowIfCancellationRequested();또는 IsCancellationRequested 속성을 검사하세요:
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested.");
return;
}if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested.");
return;
}이것은 코드가 토큰을 확인할 때만 작업 취소 이벤트가 발생하는 협력적 취소 패턴을 제공합니다.
IronPDF에서 CancellationToken 사용
IronPDF의 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);
}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);
}콘솔 출력 예제

이는 여러 지점에서 취소를 지원하는 공개 async Task를 보여줍니다. 취소가 발생하면 메서드는 OperationCanceledException을 던지고 이는 catch 블록에서 처리합니다.
IronOCR에서 CancellationToken 사용
IronOCR의 긴 이미지 스캔 작업도 내부 CancellationToken으로부터 이점을 얻습니다:
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);
}
}출력 예제

IronWord 문서 생성과 IronXL 스프레드시트 조립이 동일한 방식으로 작용합니다. 이들은 모두 취소 가능한 작업이기 때문에, 협력적 취소 패턴은 UI 스레드나 백그라운드 서비스 차단을 피합니다.
긴 작업에서 취소를 주기적으로 확인하기
일반적인 패턴은 반복하여 취소를 확인하는 것입니다:
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
}
}이것은 취소 요청을 적절하고 시기적절한 방식으로 처리하며 시스템이 사이클을 낭비하지 않도록 보장합니다.
IronPDF 렌더링 전에 HttpClient와 함께 CancellationToken 사용하기
PDF를 생성하기 전에 HTML을 가져오기 위한 웹 요청을 수행할 때 항상 토큰을 전달하십시오:
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);
}이것은 사용자가 이동할 경우 HttpClient가 시기적절하게 취소되도록 보장합니다.
.NET Core 백그라운드 서비스의 취소
.NET Core 백그라운드 서비스는 ExecuteAsync 메소드에 자동으로 전달되는 내부 CancellationToken을 포함합니다. Iron Software 도구를 실행할 때 사용하십시오:
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);
}
}이것은 서버 측 장기 실행 작업의 일반적인 패턴입니다.
Iron Software와 함께 취소 토큰을 사용하는 모범 사례
항상 비동기 메소드에 CancellationToken을 전달하십시오.
반복문 내에서 ThrowIfCancellationRequested를 사용하십시오.
빡빡한 루프 대신 await Task.Delay를 선호하십시오.
LinkedTokenSource로 토큰을 결합하십시오.
항상 OperationCanceledException을 처리하십시오.
더 나은 자원 관리와 반응성 있는 응용 프로그램을 위해 취소를 사용하십시오.
- C#이 객체 지향 프로그래밍 언어임을 기억하고 취소 메소드와 취소 로직을 깔끔하게 설계하십시오.
작업 취소에 대한 고급 고려사항
이것이 모든 .NET 개발자에게 좋은 기사임을 보장하기 위해, 남은 관련 용어를 통합하고 모범 사례를 강화하는 간단한 보충 섹션이 있습니다.
C#의 작업 취소는 자동이 아닙니다; 귀하의 메소드 내부에 구현된 취소 로직에 따라 다릅니다. 토큰 속성을 확인해야 하며, 소비자에게 반환된 토큰은 작업이 취소되었는지 또는 성공적으로 완료되었는지를 결정할 수 있도록 해야 합니다. 요청을 완료할 수 없는 경우에도 시스템은 여전히 적절하고 시기적절한 방식으로 우아하게 종료되어야 합니다.
사용자 인터페이스가 취소 버튼을 트리거하면 CancellationTokenSource의 취소 메소드가 취소를 신호하고 코드가 주기적으로 token.IsCancellationRequested를 확인해야 합니다. 작업 취소 이벤트가 발생하면 자원을 해제하고 호출자에게 제어를 반환합니다.
IronOCR 스캔과 같은 장기 실행 작업이나 IronXL 대량 스프레드시트 생성과 같이 깊이 중첩된 문서는 모든 레이어를 통해 CancellationToken을 전달해야 합니다. 사용자가 페이지에서 이동할 때, 작업은 깔끔하게 종료되어야 합니다.
Iron Software 제품은 .NET 비동기 프로그래밍 모델을 기본적으로 따르기 때문에 이를 더 쉽게 만듭니다. 자체 라이브러리를 작성할 때, 소비자가 메모리를 누출시키거나 관리되지 않는 자원을 고수하지 않고 시기 적절하게 작업을 취소할 수 있도록 동일한 모범 사례를 따르는 것을 고려하십시오.
결론
IronPDF, IronOCR, IronWord 및 IronXL과 함께 C# CancellationToken을 사용하는 것은 응용 프로그램을 반응성 있고 효율적이며 견고하게 유지하는 협력적 취소 접근법을 제공합니다. 비동기 프로그래밍에서 모범 사례를 적용하고, 비동기 작업에 토큰을 전달하며, 취소를 주기적으로 확인함으로써 더 빠르고, 안전하며, 더 유지보수 가능한 .NET 응용 프로그램을 구축할 수 있으며, 필요할 때 우아하게 종료됩니다.
