【C#】複数のスレッドが実行されている短いサンプル

2023年8月18日

サンプルコード

以下は、複数のスレッドが並行して実行されている様子を示す短いサンプルコードです。この例では、Task.Run メソッドを使用して異なるスレッド上で非同期タスクを実行します。

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("メインスレッド: 開始");

        // Task.Runを使用して非同期タスクを別スレッドで実行
        Task task1 = Task.Run(async () =>
        {
            await DoAsyncWork("タスク1");
        });

        Task task2 = Task.Run(async () =>
        {
            await DoAsyncWork("タスク2");
        });

        // 両タスクの完了を待機
        await Task.WhenAll(task1, task2);

        Console.WriteLine("メインスレッド: 終了");
    }

    static async Task DoAsyncWork(string taskName)
    {
        Console.WriteLine($"{taskName} - 開始");

        // 何か非同期の処理をシミュレートします
        await Task.Delay(2000); // 2秒待機

        Console.WriteLine($"{taskName} - 完了");
    }
}

実行結果

このコードでは、Task.Run メソッドを使用して異なるスレッド上で非同期タスクを実行しています。各タスクは DoAsyncWork メソッドを呼び出し、2秒待機してから完了メッセージを表示します。Task.WhenAll メソッドを使用して、両方のタスクが完了するのを待機します。

実行すると、以下のような出力が得られるでしょう(順序は実行時によって異なるかもしれません):

メインスレッド: 開始
タスク1 – 開始
タスク2 – 開始
タスク1 – 完了
タスク2 – 完了
メインスレッド: 終了

おまけ

サンプルコードをトップレベルステートメントで記述すると

using System;
using System.Threading.Tasks;

Console.WriteLine("メインスレッド: 開始");

// Task.Runを使用して非同期タスクを別スレッドで実行
Task task1 = Task.Run(async () =>
{
    await DoAsyncWork("タスク1");
});

Task task2 = Task.Run(async () =>
{
    await DoAsyncWork("タスク2");
});

// 両タスクの完了を待機
await Task.WhenAll(task1, task2);

Console.WriteLine("メインスレッド: 終了");

async Task DoAsyncWork(string taskName)
{
    Console.WriteLine($"{taskName} - 開始");

    // 何か非同期の処理をシミュレートします
    await Task.Delay(2000); // 2秒待機

    Console.WriteLine($"{taskName} - 完了");
}

C#,学習,非同期

Posted by hidepon