C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でのスレッドベースの並列処理:Taskを使った効率的な並行プログラミング

C#では、タスク並列化(Task Parallelism)によって処理を複数のタスクに分割し、それぞれを別々のスレッドに割り当てて実行します。これにより、マルチコアCPUの性能を最大限に活かした高速なアプリケーションを実現できます。

.NETで利用できる並列実行の仕組み

.NETには、コードを並列に実行するための主な仕組みとして、以下の3つが用意されています。

  • Thread — OSスレッドを直接操作する低レベルなクラス
  • ThreadPool — スレッドを再利用してオーバーヘッドを抑える仕組み
  • Task — 非同期処理を抽象化した高レベルなAPI

並列処理を実装する場合は、Threadクラスを直接扱うよりもTaskを使用するのが推奨されています。Taskはより柔軟で、例外処理や戻り値の扱い、キャンセル処理なども簡単に行えるためです。

TaskはOSスレッドを直接作成しない

重要なポイントとして、タスクは自身でOSスレッドを作成するわけではありません。タスクはTaskSchedulerによって管理され、スレッドプール上のスレッドで効率的に実行されます。この仕組みにより、開発者はスレッド管理の複雑さから解放され、処理内容そのものに集中できます。

タスクの作成と開始方法

それでは、実際にタスクを作成・実行するいくつかの方法を見ていきましょう。

1. デリゲートを使ってタスクを開始する

Task tsk = new Task(delegate { PrintMessage(); });
tsk.Start();

2. Task.Factory.StartNew() を使う

Task.Factory.StartNew(() => { Console.WriteLine("Welcome!"); });

この方法では、タスクの生成と開始を一度に行えます。

3. ラムダ式を使う

Task tsk = new Task(() => PrintMessage());
tsk.Start();

4. Task.Run() を使う(最も基本的な方法)

最もシンプルで一般的なのが、Task.Run()メソッドを使う方法です。

サンプルコード

using System;
using System.Threading.Tasks;

public class Example {
    public static void Main() {
        Task tsk = Task.Run(() => {
            int a = 0;
            for (a = 0; a <= 1000; a++) {}
            Console.WriteLine("{0} loop iterations ends", a);
        });
        tsk.Wait();
    }
}

出力結果

1001 loop iterations ends

このサンプルでは、Task.Run()でループ処理を含むタスクを開始し、tsk.Wait()によってタスクの完了を待機しています。メインスレッドとは別のスレッドで処理が実行されていることが確認できます。

まとめ

C#で並列処理を行う際は、Threadを直接操作せず、Taskを活用するのが現代的なベストプラクティスです。Task.Run()Task.Factory.StartNew()を使えば、簡潔なコードで安全かつ効率的に並列処理を実装できます。

  1. Windows 10でプロセスを強制終了する3つの方法【タスクマネージャー・コマンドプロンプト・PowerShell】

    アプリケーションのアイコンをクリックして起動するたびに、Windowsは実行ファイルのために自動的にプロセスを作成し、固有のプロセスID(PID)を割り当てます。例えば、Google Chromeブラウザを開いてタスクマネージャーを確認すると、「プロセス」タブにchrome.exeやChromeという名前のプロセスが、PID 4482や11700などの番号とともに表示されます。 Windowsでは、多くのアプリケーション、特にリソースを大量に消費するアプリケーションはフリーズして応答しなくなりがちです。こうしたフリーズしたアプリをXボタン(閉じるアイコン)で閉じようとしても、うまくいかないこと

  2. Windowsでタスクを自動化する方法【タスクスケジューラ活用ガイド】

    ノートパソコンやデスクトップPCは、多くの人にとって欠かせないツールとなっています。仕事をこなすのも、家族や友人との連絡も、一日の終わりにリラックスすることも、Windowsが動作するデバイスならすべてこなせます。こうした環境を常に快適に保つため、Windowsはバックグラウンドで更新プログラムの確認や一時ファイルの削除など、数多くのメンテナンスタスクを自動的に実行しています。これらは「タスクスケジューラ」というツールによって管理されており、このツールは自分で作成したスクリプトでも自由にカスタマイズできます。基本的な使い方としては、特定の条件が満たされたときに特定のアプリを自動的に開くといった