.NETヘルプ C# Task.Run(開発者向けの動作方法) Curtis Chau 更新日:7月 28, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article この記事では、C#のTask.Runの基本を掘り下げ、非同期プログラミングにおける強力な構造を探ります。 非同期プログラミングは、特にネットワーク呼び出しや集中的な計算タスクのように、アプリケーションの実行をブロックする可能性のある操作を扱う際に、応答性の高い効率的なアプリケーションを書くために不可欠です。 Task.Runは、これらの操作をバックグラウンドスレッドにオフロードし、アプリケーションのパフォーマンスと応答性を向上させるために一般的に使用される非同期メソッドの1つです。 Task.Runメソッドと、それと共にIronPDFライブラリの包括的な機能を探ります。 Task.Runの理解 Task.Runは、.NET Coreが提供する呼び出しメソッドで、開発者がCPU負荷の高いコードやI/O負荷の高い操作をスレッドプールの別のスレッドで非同期に実行できるようにします。 このメソッドは、長時間実行される操作を非同期スレッドで行うことによって、UIスレッドを応答性の高い状態に保つのに役立ちます。 別のスレッドで新しい非同期操作を開始し、それをawaitキーワードを使用して待機することが簡単になります。 Task.Runの基本的な使い方 長時間の計算を行う必要があるシンプルな例を考えます。 この操作をUIをブロックするメインスレッドで直接実行するのではなく、Task.Runを使用してバックグラウンドで処理することができます: using System; using System.Threading.Tasks; static async Task PerformComputation() { int result = await Task.Run(() => { int sum = 0; for (int i = 0; i < 1000000; i++) { sum += i; } return sum; }); Console.WriteLine($"The result is {result}"); } using System; using System.Threading.Tasks; static async Task PerformComputation() { int result = await Task.Run(() => { int sum = 0; for (int i = 0; i < 1000000; i++) { sum += i; } return sum; }); Console.WriteLine($"The result is {result}"); } Imports System Imports System.Threading.Tasks Shared Async Function PerformComputation() As Task Dim result As Integer = Await Task.Run(Function() Dim sum As Integer = 0 For i As Integer = 0 To 999999 sum += i Next i Return sum End Function) Console.WriteLine($"The result is {result}") End Function $vbLabelText $csharpLabel 出力 上記の例では、Task.Run内のラムダ式が大きな範囲の数字を合計するCPU負荷の高いコードのブロックを表しています。 Task.Runを使用することにより、この計算はバックグラウンドスレッドにオフロードされ、メインスレッドが応答性を保ちます。awaitタスクキーワードは、現在のスレッドをブロックせずにタスクが完了するまで非同期に待機するために使用されます。 非同期タスクとスレッドへのさらなる進展 Task.Runを呼び出すと、.NET Frameworkは指定されたタスクを実行するためにスレッドプールからスレッドを割り当てます。 これは、新しいスレッドを各タスクのために作成するオーバーヘッドを回避し、システムリソースをより効果的に活用するのに役立ちます。 スレッドプールは、複数のコアで複数のタスクを同時に実行できるアプリケーションのための作業スレッドのセットを管理しています。 複数のタスクの処理 Task.Runを使用して新しいタスクを同時に実行できます。これは、複数の独立した操作を同時に実行する必要があるアプリケーションにとって有益です。 ここでは複数のタスクを開始する方法です: using System; using System.Threading.Tasks; static async Task HandleMultipleTasks() { Task<int> task1 = Task.Run(() => { return PerformLongRunningWork("Task 1"); }); Task<int> task2 = Task.Run(() => { return PerformLongRunningWork("Task 2"); }); // Wait for tasks to finish and print the results int[] results = await Task.WhenAll(task1, task2); Console.WriteLine($"Results of Task 1: {results[0]}, Task 2: {results[1]}"); } static int PerformLongRunningWork(string taskName) { int result = 0; for (int i = 0; i < 500000; i++) { result += i; } Console.WriteLine($"{taskName} completed."); return result; } using System; using System.Threading.Tasks; static async Task HandleMultipleTasks() { Task<int> task1 = Task.Run(() => { return PerformLongRunningWork("Task 1"); }); Task<int> task2 = Task.Run(() => { return PerformLongRunningWork("Task 2"); }); // Wait for tasks to finish and print the results int[] results = await Task.WhenAll(task1, task2); Console.WriteLine($"Results of Task 1: {results[0]}, Task 2: {results[1]}"); } static int PerformLongRunningWork(string taskName) { int result = 0; for (int i = 0; i < 500000; i++) { result += i; } Console.WriteLine($"{taskName} completed."); return result; } Imports System Imports System.Threading.Tasks Shared Async Function HandleMultipleTasks() As Task Dim task1 As Task(Of Integer) = Task.Run(Function() Return PerformLongRunningWork("Task 1") End Function) Dim task2 As Task(Of Integer) = Task.Run(Function() Return PerformLongRunningWork("Task 2") End Function) ' Wait for tasks to finish and print the results Dim results() As Integer = Await Task.WhenAll(task1, task2) Console.WriteLine($"Results of Task 1: {results(0)}, Task 2: {results(1)}") End Function Shared Function PerformLongRunningWork(ByVal taskName As String) As Integer Dim result As Integer = 0 For i As Integer = 0 To 499999 result += i Next i Console.WriteLine($"{taskName} completed.") Return result End Function $vbLabelText $csharpLabel 出力 この例では、HandleMultipleTasksが2つの非同期タスクを開始します。 Task.WhenAllメソッドを使用して各非同期タスクを待機し、それらが同時に実行されることを可能にします。 両方のタスクが完了すると、次のコード行で続行されます。 ベストプラクティスと考慮事項 Task.Runは非同期プログラミングのための貴重なツールですが、システムリソースの過剰使用や予期しないアプリケーションの挙動を避けるために賢明に使用することが重要です。 CPU負荷の高い操作にTask.Runを使用する Task.RunはCPU負荷が高い作業に使用するのが最適で、I/O負荷が高い操作のためには使用しないほうがいいです。 I/O負荷の高いタスクには、.NETライブラリに用意されている非同期I/O操作を使用してください。 スレッドプールスレッドに注意する Task.Runがスレッドプールスレッドを使用していることを忘れないでください。 同時に多くの操作を実行することでこれらのスレッドを使い果たすと、タスクの開始時間が遅延し、アプリケーション全体が遅くなります。 同期コードを避ける Task.Runで開始されたタスクを待機する際には、Task.ResultやTask.Waitメソッドのような同期待機を使用しないでください。これは特にUIアプリケーションのようなコンテキストではデッドロックを引き起こす可能性があります。 IronPDFの紹介 IronPDF is a C# library that lets you generate and manage PDFファイルを生成および管理できます。 これは.NET開発者向けに設計されており、ブラウザで見えるものがPDFに正確に反映されるように、既にあるWebコンテンツを使ってPDF作成を簡素化します。 これらはWeb、デスクトップ、サーバーを基盤としたさまざまな.NETアプリケーションに適しており、PDFの編集、フォーム処理、ドキュメントのセキュリティ作成などの機能を提供します。 簡単に言うと、IronPDFはWebページを簡単かつ正確にPDFに変換するのに役立ちます。 複雑なAPIを手間取る必要はありません。HTMLでページをデザインし、IronPDFが残りを行います。これは異なる.NETプラットフォームで機能し、PDFの調整、セキュリティおよび対話に使えるツールを提供します。 Task.Runを使用したIronPDF コード例 こちらはIronPDFをTask.RunでC#で使用するシンプルな例です。 この例は、HTMLコンテンツから非同期にPDFを生成する方法を示します。 これは特にデスクトップアプリケーションでのUIフリーズを回避したり、Webアプリケーションでの負荷管理に役立ちます: using IronPdf; using System.Threading.Tasks; public class PdfGenerator { public static async Task CreatePdfAsync() { var renderer = new ChromePdfRenderer(); var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is an async PDF generation.</p>"; // Run the PDF generation in a separate task var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(htmlContent)); // Save the PDF to a file pdf.SaveAs("asyncIronPDF.pdf"); } // Main method to execute the PDF generation public static void Main() { // Set the license key for IronPDF License.LicenseKey = "License-Key"; // Calling the async PDF generation method and blocking the Main thread until completion Task.Run(async () => await PdfGenerator.CreatePdfAsync()).Wait(); // Inform the user that the PDF generation is complete System.Console.WriteLine("PDF generated."); } } using IronPdf; using System.Threading.Tasks; public class PdfGenerator { public static async Task CreatePdfAsync() { var renderer = new ChromePdfRenderer(); var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is an async PDF generation.</p>"; // Run the PDF generation in a separate task var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(htmlContent)); // Save the PDF to a file pdf.SaveAs("asyncIronPDF.pdf"); } // Main method to execute the PDF generation public static void Main() { // Set the license key for IronPDF License.LicenseKey = "License-Key"; // Calling the async PDF generation method and blocking the Main thread until completion Task.Run(async () => await PdfGenerator.CreatePdfAsync()).Wait(); // Inform the user that the PDF generation is complete System.Console.WriteLine("PDF generated."); } } Imports IronPdf Imports System.Threading.Tasks Public Class PdfGenerator Public Shared Async Function CreatePdfAsync() As Task Dim renderer = New ChromePdfRenderer() Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is an async PDF generation.</p>" ' Run the PDF generation in a separate task Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf(htmlContent)) ' Save the PDF to a file pdf.SaveAs("asyncIronPDF.pdf") End Function ' Main method to execute the PDF generation Public Shared Sub Main() ' Set the license key for IronPDF License.LicenseKey = "License-Key" ' Calling the async PDF generation method and blocking the Main thread until completion Task.Run(Async Function() Await PdfGenerator.CreatePdfAsync()).Wait() ' Inform the user that the PDF generation is complete System.Console.WriteLine("PDF generated.") End Sub End Class $vbLabelText $csharpLabel 出力 この例は、PDF生成をTask内にカプセル化し、非ブロッキング操作が必要なアプリケーションに適しています。 結論 Task.RunはC#における非同期タスクを効果的に管理するための強力な機能です。 正しく使用することを理解することで、アプリケーションのパフォーマンスと応答性を向上させることができます。 非同期操作をどのように実装するかを決定する際にタスクがCPU負荷かI/O負荷かを考慮し、UIスレッドを重い処理タスクから常に解放することを目指してください。 開発者は、購入を決定する前に無料トライアルを使用してIronPDFをテストすることができます。 ライセンスの開始価格は$799です。 よくある質問 C#でタスクを非同期に実行するにはどうすればよいですか? CPUバウンドまたはI/Oバウンドの操作を別のスレッドプールのスレッドで非同期に実行するにはTask.Runメソッドを使用できます。これによりメインスレッドのブロックを防ぎ、アプリケーションの応答性を向上させます。 非同期プログラミングにTask.Runを使用する利点は何ですか? Task.Runは長時間実行されるタスクをバックグラウンドスレッドにオフロードすることで、アプリケーションのパフォーマンスを向上させ、スレッドプールを効率的に利用します。これによりUIスレッドが応答性を維持し、新しいスレッドの作成に関連するオーバーヘッドを回避できます。 C#でPDFを生成するためにTask.Runを使用できますか? はい、C#でIronPDFのようなライブラリを使用する場合、PDFを非同期に生成するのにTask.Runを使用できます。このアプローチにより、PDF生成タスクがメインアプリケーションスレッドをブロックしないようにして、パフォーマンスをスムーズにします。 C#アプリケーションでTask.Runを使用するためのベストプラクティスとは何ですか? Task.Runを使用する際は、CPUバウンドタスクに限定し、I/Oバウンドタスクには使用しないようにしましょう。また、Task.WaitやTask.Resultのような同期待機を避け、デッドロックを防ぎスレッドプールの使用を効果的に管理します。 Task.Runで複数のタスクを同時に管理するにはどうすればよいですか? 開発者はTask.Runを使用して複数のタスクを開始し、Task.WhenAllでそれらの完了を待つことにより管理できます。これにより、独立した操作の効率的な並行実行が可能になります。 なぜ非同期プログラミングがC#で重要なのですか? 非同期プログラミングは、実行をブロックする可能性のある操作(ネットワーク呼び出しや重い計算など)を扱う際に、応答性のあるアプリケーションを開発するために重要です。リソースの管理が改善され、ユーザーエクスペリエンスが向上します。 Task.Runがアプリケーションのデッドロックを防ぐのにどのように役立ちますか? Task.Runはタスクを非同期に実行し、メインスレッドをブロックしないことでデッドロックを防ぎます。しかし、同期待機を避け、スレッドプールのリソースを適切に管理してデッドロックのリスクを軽減することが重要です。 C#でHTMLコンテンツからPDFを生成するのに役立つツールは何ですか? IronPDFは、C#でHTML、CSS、JavaScriptからPDFを生成できるライブラリです。これにより、開発者はWebコンテンツを正確に反映するPDFを簡単に作成できます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# Volatile(開発者向けの動作方法)C# Nito.Asyncex(開発者向け...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む