C# 取消令牌(開發者使用方法)
在現代軟體開發中,有效率地管理長時間執行的任務至關重要,尤其是在經常產生大型或複雜 PDF 檔案的應用程式中。 C# 開發人員通常依賴 IronPDF 來進行無縫 PDF 創建,但處理可能冗長的 PDF 生成任務需要一種管理使用者中斷或取消的方法。
這就是 C# 中 CancellationToken 發揮作用的地方。 透過與IronPDF整合,您可以確保您的 PDF 製作任務既順應需求又有效率。 在這篇文章中,我們將探討 CancellationToken 的重要性、為何它與 IronPDF 搭配得宜,以及您可以如何實作以優雅地取消任務。
C#中的CancellationToken是什麼?
CancellationToken 是 C# 中異步程式設計的基本部分。 它可讓您發出取消任務的訊號,讓開發人員更能控制長時間執行的作業。 這在執行製作報告或發票等工作時特別有用,您可能想要持續從資料產生動態報告,直到達到目標金額為止,屆時您可以使用 C# 取消符記來表示應該取消操作,從而優雅地結束程式。
如何運作?
本質上,CancellationToken 會傳給任務或方法,而任務或方法會定期檢查是否有人要求取消。 如果是這樣的話,任務可以優雅地終止,從而釋放資源並提昇應用程式的反應能力。 這對於像產生 PDF 的情況特別有用,因為複雜的文件可能需要花時間來建立。
透過使用 CancellationTokens,您可以避免因任務執行時間過長而造成的潛在弊端,例如浪費系統資源和不佳的使用者體驗。
內部取消代幣
在 C# 中,內部取消標記指的是在特定類別或方法中建立和管理的取消標記,而非從外部來源傳入。 這允許在單一元件的範圍內對任務取消進行更精細的控制,使其能夠監控和回應源自內部的取消請求。
在您想要封裝取消邏輯的情況下,使用內部取消標記特別有用,因為您不需要將取消邏輯暴露給您類別的消費者,因此可以維持乾淨的介面。 此方法可增強程式碼模組化,並使複雜的異步工作流程更容易管理,同時仍可利用更廣泛的 CancellationToken 框架所提供的彈性。
為何使用 IronPDF 的取消代碼?
在產生 PDF 時,尤其是在 Web 應用程式或複雜的報表系統中,您可能會遇到使用者啟動任務(例如建立大型 PDF 檔案),但隨即瀏灠離開或不再需要結果的情況。 在這些情況下,您希望可以選擇取消 PDF 生成程序,以避免對伺服器或使用者介面造成不必要的負載。
以下是為何在 IronPDF 中使用 CancellationToken 是至關重要的:
1.防止不必要的負載。
如果使用者不再需要他們所要求的 PDF,就沒有理由繼續這個過程。 透過使用 CancellationToken,您可以停止 PDF 生成任務,防止伺服器負載過重,並改善整體應用程式效能。
2.增強使用者體驗。
在桌面應用程式中,PDF 的產生可能會發生在 UI 線程上,如果任務長時間執行,可能會鎖住使用者介面。 透過結合 CancellationToken,使用者可以取消任務,並保持應用程式的反應速度。
3. 增強可擴展性。
在眾多使用者同時產生 PDF 的網路應用程式中,可擴充性是關鍵。 CancellationToken 可讓您安全地取消不必要的任務,騰出資源來有效率地處理其他請求。
如何使用 IronPDF 實作 CancellationToken。
既然我們已瞭解 CancellationToken 為何有用,讓我們來看看如何使用 IronPDF 實作。
步驟 1:在專案中設定 IronPDF
若要開始使用 IronPDF,您首先需要安裝它。 如果已安裝,則可跳至下一節; 另外,以下步驟涵蓋了如何安裝 IronPdf 函式庫。
透過 NuGet 套件管理員控制台
要使用 NuGet Package Manager Console 安裝 IronPdf,請開啟 Visual Studio 並導航至 Package Manager Console。 然後執行以下指令:
Install-Package IronPdf
透過解決方案的 NuGet 套件管理員
打開 Visual Studio,進入"工具 -> NuGet 套件管理員 -> 管理解決方案的 NuGet 套件",搜尋 IronPdf。 在這裡,您只需選擇專案並點選"安裝",IronPDF 即會加入您的專案中。
安裝 IronPDF 之後,您只需在程式碼頂端加上正確的 using statement 即可開始使用 IronPDF:
using IronPdf;using IronPdf;步驟 2:在異步 PDF 產生方法中使用取消代幣
讓我們深入瞭解實際的執行方式。 在這個範例中,我們將使用 IronPDF 從 HTML 產生一個簡單的 PDF,但會加入一個 CancellationToken,允許在必要時取消任務。
using IronPdf;
using System;
using System.Threading;
using System.Threading.Tasks;
public class PdfGenerator
{
public async Task GeneratePdfWithCancellation(CancellationToken token)
{
var Renderer = new ChromePdfRenderer();
try
{
// Check for cancellation before starting
token.ThrowIfCancellationRequested();
// Simulating a long task that can be checked for cancellation periodically
for (int i = 0; i < 10; i++)
{
// Simulating a piece of work (this could be part of a larger HTML rendering)
await Task.Delay(500); // Simulate chunk processing
// Periodically check for cancellation in long-running operations
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested. Throwing exception.");
token.ThrowIfCancellationRequested(); // This will trigger an OperationCanceledException
}
}
// Simulate PDF creation after the long process
var pdf = await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>");
// Save the PDF after ensuring no cancellation occurred
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully.");
}
catch (OperationCanceledException)
{
// Handle task cancellation
Console.WriteLine("PDF generation was canceled.");
}
catch (Exception ex)
{
// Handle other exceptions
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
public class Program
{
public static async Task Main(string[] args)
{
// Create a CancellationTokenSource
var cancellationTokenSource = new CancellationTokenSource();
// Create our cancellation token
var token = cancellationTokenSource.Token;
// Start the PDF generation task
var pdfGenerator = new PdfGenerator();
Task pdfTask = pdfGenerator.GeneratePdfWithCancellation(token);
// Simulate a cancellation scenario
Console.WriteLine("Press any key to cancel PDF generation...");
Console.ReadKey();
// Cancel the task by calling Cancel() on the CancellationTokenSource
cancellationTokenSource.Cancel();
try
{
// Await the task to handle any exceptions, such as cancellation
await pdfTask;
}
catch (OperationCanceledException)
{
// Confirm the cancellation
Console.WriteLine("The PDF generation was canceled.");
}
finally
{
cancellationTokenSource.Dispose();
}
Console.WriteLine("Program finished.");
}
}using IronPdf;
using System;
using System.Threading;
using System.Threading.Tasks;
public class PdfGenerator
{
public async Task GeneratePdfWithCancellation(CancellationToken token)
{
var Renderer = new ChromePdfRenderer();
try
{
// Check for cancellation before starting
token.ThrowIfCancellationRequested();
// Simulating a long task that can be checked for cancellation periodically
for (int i = 0; i < 10; i++)
{
// Simulating a piece of work (this could be part of a larger HTML rendering)
await Task.Delay(500); // Simulate chunk processing
// Periodically check for cancellation in long-running operations
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested. Throwing exception.");
token.ThrowIfCancellationRequested(); // This will trigger an OperationCanceledException
}
}
// Simulate PDF creation after the long process
var pdf = await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>");
// Save the PDF after ensuring no cancellation occurred
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully.");
}
catch (OperationCanceledException)
{
// Handle task cancellation
Console.WriteLine("PDF generation was canceled.");
}
catch (Exception ex)
{
// Handle other exceptions
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
public class Program
{
public static async Task Main(string[] args)
{
// Create a CancellationTokenSource
var cancellationTokenSource = new CancellationTokenSource();
// Create our cancellation token
var token = cancellationTokenSource.Token;
// Start the PDF generation task
var pdfGenerator = new PdfGenerator();
Task pdfTask = pdfGenerator.GeneratePdfWithCancellation(token);
// Simulate a cancellation scenario
Console.WriteLine("Press any key to cancel PDF generation...");
Console.ReadKey();
// Cancel the task by calling Cancel() on the CancellationTokenSource
cancellationTokenSource.Cancel();
try
{
// Await the task to handle any exceptions, such as cancellation
await pdfTask;
}
catch (OperationCanceledException)
{
// Confirm the cancellation
Console.WriteLine("The PDF generation was canceled.");
}
finally
{
cancellationTokenSource.Dispose();
}
Console.WriteLine("Program finished.");
}
}控制台輸出

PDF輸出

在本範例中,我們將示範如何在 C# 程式中使用 CancellationToken 來取消 IronPDF 長時間執行的 PDF 生成任務。 程式碼分為兩部分:PDF 生成過程 (PdfGenerator class) 和主要程式邏輯 (Program class)。
- Class PdfGenerator: 此類包含一個模擬產生 PDF 檔案的方法,同時透過 CancellationToken 支援取消。
- 我們在 main 方法中使用 CancellationTokenSource() 建立我們的取消令牌來源,然後透過傳入 CancellationTokenSource 的Token 屬性來建立我們的令牌物件。
- ChromePdfRenderer用來自 IronPDF 函式庫,將 HTML 內容渲染成 PDF 文件。
- GeneratePdfWithCancellation 方法是異步的(
async),並返回一個 Task。 此方法接受 CancellationToken(token),以透過取消請求處理任務取消。 - CancellationToken 可讓我們安全地取消長時間執行的作業。 然而,取消是合作性的,這意味著任務本身必須定期檢查標記狀態。
- 在此程式碼中,我們模擬一項長時間的任務,並定期進行取消檢查。 關鍵的一點是,我們在 PDF 生成過程中會手動檢查取消 (
token.IsCancellationRequested),如果將 token 傳給它,就準備好執行取消方法。 - 如果使用者按下按鍵以示取消程式,任務會優雅地停止,並發出 OperationCanceledException,阻止以適當且及時的方式完成 PDF 的產生。
- 如果沒有發生取消的情況,產生的 PDF 會儲存為 "output.pdf" 以防止程式執行完整的任務流程。
使用 CancellationToken 的 IronPDF 的實際應用案例
在幾種實際情況下,使用 IronPDF 的一個或多個取消代碼可以增強應用程式的效能和使用者體驗。 以下是幾個範例:
1.網路應用程式。
在 Web 應用程式中,使用者經常會啟動一些動作,例如產生 PDF 格式的報告。 但是,如果使用者導航離開頁面或關閉瀏覽器,系統可以偵測到這一情況,並使用 CancellationToken 停止 PDF 生成程序。
HttpContext.Response.RegisterForDispose(CancellationTokenSource);HttpContext.Response.RegisterForDispose(CancellationTokenSource);這個簡單的實作可以讓網頁伺服器更有效地擴充,不需要將資源用在不再需要的任務上。
2.長時間執行的報表。
在報告應用程式中,使用者可能會要求將大型資料集匯出成 PDF。 如果使用者改變主意或進行錯誤的查詢,CancellationToken 可讓您中途取消任務,避免資源浪費。
3.背景服務。
在背景服務或微服務中,耗費大量時間的任務,例如產生大量 PDF 批次,可以使用 CancellationToken 更有效率地管理。 當服務即將關閉或縮減規模時,可以乾淨地取消正在進行中的任務,確保資料不會遺失或損毀。
結論
現在,我們今天關於在 IronPDF 中使用取消代幣的討論已經告一段落,您將能夠像專業人士一樣將其實現到您的 PDF 專案中! 使用 IronPDF 與 C# CancellationToken 能讓您建立更有效率、反應迅速的應用程式,從容處理 PDF 生成任務。 此方法可實現合作取消模型,讓任務在執行過程中的安全點檢查取消請求,而不是突然終止。
無論您是要管理長時間執行的報表、在 Web 應用程式中依需求產生 PDF,或是背景服務,結合 CancellationToken, 或同時使用多個 token,都能確保取消不必要的工作,避免浪費資源並提升使用者體驗。
只需要幾行程式碼,您就可以改善應用程式的擴充性和回應能力,同時讓使用者更能控制自己的動作。 如果您尚未探索 IronPDF,現在正是嘗試 免費試用的最佳時機,並探索其強大的 PDF 生成功能如何改變您的 C# 專案。
常見問題解答
如何在 C# 中使用 CancellationToken 來管理長時間運作的任務?
您可以將 CancellationToken 整合到長時間運行的任務中,方法是將其傳遞給任務並定期檢查是否已收到取消請求。這樣可以優雅地終止任務,釋放資源並保持應用程式的回應速度。
為什麼 CancellationToken 在 PDF 生成中很重要?
在 PDF 產生過程中,取消令牌 (CancellationToken) 可以透過允許在任務變得不必要時(例如使用者離開頁面時)取消任務,從而幫助高效管理資源。這可以防止伺服器負載過高,並提升使用者體驗。
如何在 C# PDF 生成任務中實作 CancellationToken?
若要在 C# PDF 產生任務中實作 CancellationToken,您需要將該令牌傳遞給您的方法,並在執行期間定期檢查取消請求。如果您偵測到取消請求,您可以優雅地終止該任務。
在 PDF 生成中使用 CancellationToken 的非同步方法的目的是什麼?
在 PDF 生成中使用具有 CancellationToken 的非同步方法,可以非同步運行任務,從而提高應用程式的回應速度,並允許在不再需要時取消任務。
CancellationToken 如何改善 Web 應用程式中的使用者體驗?
透過使用 CancellationToken,Web 應用程式可以在使用者離開頁面時取消 PDF 生成等任務,防止不必要的處理並保持應用程式的回應速度,從而提升使用者體驗。
ChromePdfRenderer在非同步 PDF 創建中扮演什麼角色?
IronPDF 的ChromePdfRenderer用於將 HTML 內容轉換為 PDF 文件。它支援非同步操作,讓您可以使用 CancellationToken 有效地管理任務生命週期和回應速度。
如果在產生 PDF 文件期間提出取消請求會發生什麼情況?
如果在產生 PDF 的過程中收到取消請求,任務將檢查 CancellationToken 的狀態。如果偵測到取消,則會拋出 OperationCanceledException 異常,並停止該進程以節省資源。
CancellationToken 如何增強應用程式的可擴充性?
CancellationToken 透過允許應用程式取消不必要的任務(例如生成 PDF)來增強可擴展性,從而減少資源消耗並提高應用程式的整體效能。
在後台服務中使用 CancellationToken 有什麼好處?
在後台服務中,使用 CancellationToken 可以管理長時間運行的任務,例如批次 PDF 處理,從而能夠在服務關閉或擴展操作期間乾淨利落地取消任務。
CancellationToken 與 IronPDF 的整合如何提高應用程式效率?
將 CancellationToken 與 IronPDF 集成,可以透過取消不必要的 PDF 生成任務來更好地管理資源,從而提高應用程式的效率和回應速度,同時降低伺服器負載。







