如何生成非同步和多线程 PDF 文件

How to Generate PDFs with Async and Multithreading

This article was translated from English: Does it need improvement?
Translated
View the article in English

在使用IronPDF在C#和VB.NET中批量生成高性能PDF或優化性能時,非同步和執行緒是至關重要的。

快速開始:使用IronPDF非同步轉換HTML為PDF

僅需幾行代碼,即可使用IronPDF開始非同步PDF生成。

通過RenderHtmlAsPdfAsync方法,您可以高效地將HTML內容轉換為PDF,從而優化您的應用程序性能。 本指南將向您展示如何利用非同步操作的力量來進行高效性能的PDF生成,非常適合批量處理和多執行緒環境。 體驗IronPDF強大功能的簡便快捷。

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. Copy and run this code snippet.

    var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("<h1>Hello World!</h1>");
  3. Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer
class="hsg-featured-snippet">

簡化工作流程(5步驟)

  1. 從NuGet下載IronPDF以開始非同步和多執行緒PDF生成
  2. 準備要轉換的HTML內容
  3. 使用RenderHtmlAsPdfAsync方法與IronPDF非同步地將HTML轉換為PDF
  4. 探索使用Parallel.ForEach方法進行PDF處理中的多執行緒
  5. 查看不同PDF生成技術的性能比較


非同步範例

IronPDF完全支持使用其渲染方法,如RenderHtmlAsPdfAsync方法進行非同步操作。

:path=/static-assets/pdf/content-code-examples/how-to/async-async.cs
using IronPdf;
using System.Threading.Tasks;

// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

string[] htmlStrings = {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"};

// Create an array to store the tasks for rendering
var renderingTasks = new Task<PdfDocument>[htmlStrings.Length];

for (int i = 0; i < htmlStrings.Length; i++)
{
    int index = i; // Capturing the loop variable
    renderingTasks[i] = Task.Run(async () =>
    {
        // Render HTML to PDF
        return await renderer.RenderHtmlAsPdfAsync(htmlStrings[index]);
    });
}

// Wait for all rendering tasks to complete
// await Task.WhenAll(renderingTasks);
Imports IronPdf
Imports System.Threading.Tasks

' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()

Private htmlStrings() As String = {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"}

' Create an array to store the tasks for rendering
Private renderingTasks = New Task(Of PdfDocument)(htmlStrings.Length - 1){}

For i As Integer = 0 To htmlStrings.Length - 1
	Dim index As Integer = i ' Capturing the loop variable
	renderingTasks(i) = Task.Run(Async Function()
		' Render HTML to PDF
		Return Await renderer.RenderHtmlAsPdfAsync(htmlStrings(index))
	End Function)
Next i

' Wait for all rendering tasks to complete
' await Task.WhenAll(renderingTasks);
$vbLabelText   $csharpLabel

多執行緒範例

IronPDF是執行緒安全的,在使用IronPdf.ChromePdfRenderer渲染引擎時支持多執行緒操作。請注意,在macOS機器上的多執行緒操作受限制。

Parallel.ForEach模式特別適用於批量處理PDF。

:path=/static-assets/pdf/content-code-examples/how-to/async-multi-thread.cs
using IronPdf;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;

var queue = new List<string>() { "<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>" };

// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Create a list to store the rendered PDFs
List<PdfDocument> pdfResults = new List<PdfDocument>();

Parallel.ForEach(queue, html =>
{
    // Render HTML to PDF
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    // You may choose to save the PDF to disk here if needed
    // For this example, we'll store it in the pdfResults list
    lock (pdfResults)
    {
        pdfResults.Add(pdf);
    }
});
Imports IronPdf
Imports System.Collections.Concurrent
Imports System.Collections.Generic
Imports System.Threading.Tasks

Private queue = New List(Of String)() From {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"}

' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()

' Create a list to store the rendered PDFs
Private pdfResults As New List(Of PdfDocument)()

Parallel.ForEach(queue, Sub(html)
	' Render HTML to PDF
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

	' You may choose to save the PDF to disk here if needed
	' For this example, we'll store it in the pdfResults list
	SyncLock pdfResults
		pdfResults.Add(pdf)
	End SyncLock
End Sub)
$vbLabelText   $csharpLabel

性能比較

我們來進行比較。 通過WaitFor類來模擬複雜HTML渲染添加額外的5秒延遲。 以下是使用上述不同技術的性能比較表。

正常渲染 非同步渲染 多執行緒渲染
15.75秒 05.59秒 05.68秒

常見問題解答

如何在C#中異步地將HTML轉換為PDF?

你可以在C#中使用IronPDF的RenderHtmlAsPdfAsync方法異步地將HTML轉換為PDF,這樣可以有效生成PDF,不會阻塞主線程。

使用多線程處理PDF有哪些好處?

使用IronPDF進行PDF處理的多線程允許您同時處理多個PDF轉換,非常適合批量處理,並利用多核心CPU提高性能。

IronPDF能否用於異步和多線程PDF生成?

是的,IronPDF支持異步和多線程PDF生成。您可以使用RenderHtmlAsPdfAsync進行異步操作,使用Parallel.ForEach進行多線程處理。

IronPDF在PDF生成時是否為線程安全?

是的,IronPDF是線程安全的,特別是在使用IronPdf.ChromePdfRenderer渲染引擎時,但在macOS上有一些限制。

異步PDF生成與多線程生成的性能比較如何?

在性能比較中,使用IronPDF的異步PDF生成通常需要大約5.59秒,而多線程生成需要大約5.68秒,兩者均顯著快於正常渲染的15.75秒。

在使用IronPDF處理PDF時,多線程的一個實用案例是什麼?

使用IronPDF進行多線程處理的一個實用案例是批量處理,您需要同時將大量HTML文件轉換為PDF,優化資源使用並減少處理時間。

在macOS上使用IronPDF時有什麼特別的考慮?

雖然IronPDF支持多線程功能,但在macOS上使用此功能時存在已知限制。測試和驗證在特定環境中的多線程應用程序是很重要的。

Chipego
軟體工程師
Chipego 擁有自然的傾聽技巧,這有助於他理解客戶問題並提供智能解決方案。他於 2023 年加入 Iron Software 團隊,擁有信息技術學士學位。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但他對所有產品的知識日漸增長,因為他發現新的方法來支持客戶。他喜歡 Iron Software 的合作生活,來自公司的成員將他們的各種經驗帶來貢獻於有效及創新解決方案。當 Chipego 離開書桌時,他經常被発現正享受一本好書或者在踢足球。
準備好開始了嗎?
Nuget 下載 16,154,058 | 版本: 2025.11 剛剛發布