.NET幫助 C# Cancellationtoken(對開發者如何理解其工作) Jacob Mellor 更新:2025年6月22日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 在現代軟體開發中,有效管理長時間運行的任務至關重要,特別是在生成大型或複雜 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 生成過程,以避免不必要的服務器或 UI 負荷。 這就是為什麼使用 CancellationToken 與 IronPDF 結合非常重要的原因所在: 1. 防止不必要的負荷 如果用戶不再需要他們請求的 PDF,則沒有理由讓該過程繼續下去。 通過利用 CancellationToken,您可以中止 PDF 生成任務,防止超載伺服器並提高整體應用程序性能。 2. 提高用戶體驗 在桌面應用程序中,PDF 生成可能在 UI 執行緒上進行,如果任務運行時間過長,這可能會鎖定用戶界面。 通過結合 CancellationToken,用戶可以取消任務並保持應用程序的響應性。 3. 改善擴展性 在眾多用戶同時生成PDF的 Web 應用中,可擴展性是關鍵。 取消代幣讓您得以安全地取消不必要的任務,釋放資源來有效地處理其他請求。 如何與 IronPDF 實施 CancellationToken 現在我們了解了 CancellationToken 的實用性,讓我們一起探討如何將其與 IronPDF 結合使用。 步驟 1:在您的專案中設置 IronPDF 要開始使用 IronPDF,您首先需要安裝它。 如果它已安裝,您可以跳到下一部分; 否則,以下步驟將說明如何安裝 IronPDF 程式庫。 通過 NuGet 套件管理器控制台 要使用 NuGet 套件管理器控制台 安裝 IronPDF,打開 Visual Studio 並導航到套件管理器控制台。 然後運行以下命令: Install-Package IronPdf 通過 NuGet 套件管理器為解決方案 在 Visual Studio 中,前往"工具 -> NuGet 套件管理器 -> 管理解決方案的 NuGet 套件",然後搜索 IronPDF。 從這裡,您只需選擇您的專案並單擊"安裝",IronPDF 將被添加到您的專案中。 一旦您安裝了 IronPDF,您只需在代碼頂部添加正確的 using 語句即可開始使用 IronPDF: using IronPdf; using IronPdf; $vbLabelText $csharpLabel 步驟 2:在非同步 PDF 生成方法中使用取消代幣 讓我們深入實際的實施。 在此範例中,我們將使用 IronPDF 從 HTML 生成簡單的 PDF,但允許使用取消代幣來根據需要取消任務。 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."); } } $vbLabelText $csharpLabel 主控台輸出 PDF 輸出 在本範例中,我們展示了如何在 C# 程式中使用 CancellationToken 來取消使用 IronPDF 的長時間運行 PDF 生成任務。 該代碼結構分為兩部分:PDF 生成過程 (PdfGenerator 類) 和主程序邏輯 (Program 類)。 類 PdfGenerator: 此類別包含一個方法,該方法模擬生成 PDF 文件並支持通過 CancellationToken 進行取消。 我們在 main 方法中使用 CancellationTokenSource() 創建我們的取消代幣來源,然後通過傳遞 CancellationTokenSource 的 Token 屬性來創建我們的 Token 對象。 ChromePdfRenderer 來自 IronPDF 程式庫,用於將 HTML 內容渲染為 PDF 文件。 GeneratePdfWithCancellation 方法是非同步的 (async) 並返回一個任務。 此方法接受一個 CancellationToken (token) 來處理通過取消請求進行的任務取消。 CancellationToken 允許我們安全地取消長時間運行的操作。 然而,取消是合作的,這意味著任務本身必須定期檢查代幣狀態。 在此代碼中,我們模擬了一個定期檢查消檢代幣的長任務。 關鍵點是,我們在 PDF 生成過程中手動檢查取消 (token.IsCancellationRequested),如果通過了代幣,準備執行取消方法。 如果用戶按下鍵以指示程序的取消,任務會優雅地停止並引發 OperationCanceledException,防止 PDF 生成的完成。 如果沒有發生取消,則生成的 PDF 會以"output.pdf" 的形式保存,以防止程序運行完整的任務過程。 在實際使用中 IronPDF 與 CancellationToken 的應用 在多種實際情況下,使用一個或多個取消代幣與 IronPDF 結合可以提高應用程序的性能和用戶體驗。 以下是一些示例: 1. Web 應用 在 Web 應用中,使用者經常會啟動生成 PDF 格式報告等動作。 然而,如果用戶導航離開頁面或關閉瀏覽器,系統可以檢測到這一點並使用 CancellationToken 來停止 PDF 生成過程。 HttpContext.Response.RegisterForDispose(CancellationTokenSource); HttpContext.Response.RegisterForDispose(CancellationTokenSource); $vbLabelText $csharpLabel 這簡單的實施允許 Web 伺服器更有效地擴展,不必將資源用於不再需要的任務上。 2. 長時間運行的報告 在報告應用中,用戶可能要求將大型數據集導出為 PDF。 若用戶改變主意或執行錯誤的查詢,CancellationToken 讓您能夠在過程中途取消任務,防止資源浪費。 3. 背景服務 在背景服務或微服務中,像生成大型 PDF 批次這樣耗時的任務,可以使用 CancellationToken 更有效地管理。 當服務即將關閉或被縮小時,進行中的任務可以被乾淨地取消,確保沒有數據丟失或損壞。 結論 現在我們已經接近今天的討論尾聲,關於如何使用 IronPDF 的取消代幣,您將能夠像專業人士一樣將它們實施到您的 PDF 專案中! 使用 C# CancellationToken 與 IronPDF 使您能夠構建更高效和響應迅速的應用程式,優雅地處理 PDF 生成任務。 這種方法啟用了一種合作式的取消模型,允許任務在執行過程中的安全點檢查取消請求,而不是被突然終止。 無論您是在管理長時間運行的報告、Web 應用中的按需 PDF 生成,還是背景服務中,結合使用一個 CancellationToken 或多個代幣,確保不必要的任務可以被取消,防止資源浪費並提升用戶體驗。 只需幾行代碼,您就能提高應用程式的擴展性和響應性,同時讓用戶擁有對其操作的更多控制。 如果您還未探索 IronPDF,那麼現在是嘗試免費試用的最佳時機,發現其強大的 PDF 生成能力如何改變您的 C# 項目。 常見問題解答 我可以如何在 C# 中使用 CancellationToken 管理長時間運行的任務? 您可以將 CancellationToken 集成到長時間運行的任務中,通過將其傳遞給任務並定期檢查是否有取消請求。這允許任務的優雅終止,釋放資源並維持應用程序的響應性。 為什麼 CancellationToken 在 PDF 生成中很重要? 在 PDF 生成中,CancellationToken 通過允許在任務不再需要時(例如用戶離開頁面時)取消任務來高效管理資源。這防止了過度的伺服器負載並增強了用戶體驗。 如何在 C# 的 PDF 生成任務中實施 CancellationToken? 要在 C# 的 PDF 生成任務中實施 CancellationToken,您需在您的方法中傳遞該令牌,並在執行期間定期檢查是否有取消請求。如果檢測到取消,您可以優雅地終止任務。 在 PDF 生成中使用 async 方法與 CancellationToken 的目的何在? 在 PDF 生成中使用帶有 CancellationToken 的 async 方法使任務能夠異步運行,改善應用程序的響應性,並使任務得以在不再需要時取消。 CancellationToken 如何改善網頁應用程序的用戶體驗? 通過利用 CancellationToken,網頁應用程序可以在用戶導航開時取消任務,如 PDF 生成,防止不必要的處理並保持應用程序的響應性,從而提升用戶體驗。 在異步 PDF 創建中 ChromePdfRenderer 的作用是什麼? IronPDF 的 ChromePdfRenderer 用於將 HTML 內容轉換為 PDF 文檔。它支持異步操作,使您可以使用 CancellationToken 有效地管理任務的生命周期和響應性。 如果在 PDF 生成期間收到取消請求會發生什麼? 如果在 PDF 生成期間收到取消請求,任務會檢查 CancellationToken 的狀態。如果檢測到取消,則會拋出 OperationCanceledException,以停止進程並節省資源。 CancellationToken 如何增強應用程序的可擴展性? CancellationToken 通過允許應用程序取消不必要的任務(如在生成 PDF 時)增強了擴展性,這減少了資源消耗並提高了應用程序的整體性能。 在背景服務中使用 CancellationToken 的好處是什麼? 在背景服務中,使用 CancellationToken 允許管理長時間運行的任務,如批量 PDF 處理,並在服務關閉或擴展性操作時讓任務得以妥善取消。 CancellationToken 與 IronPDF 的集成如何提高應用程序的效率? 將 CancellationToken 與 IronPDF 集成,可以通過取消不必要的 PDF 生成任務來更好地管理資源,從而提高應用程序的效率和響應性,同時降低伺服器負載。 Jacob Mellor 立即與工程團隊聊天 首席技術官 Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。 相關文章 更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多 更新2025年12月20日 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新2025年12月20日 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C#選擇案例(對開發者如何理解其工作)math.max C#(對開發者如何理...
更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多