0Pricing
C# Academy · レッスン

スレッドとタスクを理解する

C#で並列処理を管理するスレッドとタスクを学びます

「スレッドとタスクを理解する」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/5です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全5レッスンが含まれています。

スレッドとタスクの概要

スレッドとタスクを理解する

次のレッスンへようこそ!このレッスンでは、C#のスレッドとタスクについて学びます。これらを使うと複数の処理を同時に実行でき、パフォーマンスを向上させられます。さっそく始めましょう!

スレッドとタスクを理解する — イラスト1

スレッド処理とは

スレッド処理とは

スレッド処理とは、複数の処理を同時に実行することです。各スレッドは、アプリケーション内の独立した制御の流れを表します。

重要なポイント:スレッド処理では複数のプロセッサコアを活用して同時実行するため、パフォーマンスが向上します。

スレッドの作成と開始

スレッドの作成と開始

Threadクラスを使ってスレッドを作成し、開始できます。例:

using System;
using System.Threading;

class Program {
    static void Main() {
        Thread thread = new Thread(PrintNumbers);
        thread.Start();

        Console.WriteLine("Main thread is running...");
    }

    static void PrintNumbers() {
        for (int i = 1; i <= 5; i++) {
            Console.WriteLine(i);
            Thread.Sleep(1000); // Pause for 1 second
        }
    }
}

タスクの概要

タスクの概要

タスクは、スレッドと比べて、並行プログラミングのためのより高水準な抽象化を提供します。Taskクラスは、C# の Task Parallel Library (TPL) の一部です。

例:タスクの作成と開始:

ヒント:タスクはスレッドと比べて管理しやすく、より優れたエラー処理を提供します。

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        Task task = Task.Run(() => {
            for (int i = 1; i <= 5; i++) {
                Console.WriteLine(i);
                Task.Delay(1000).Wait();
            }
        });

        Console.WriteLine("Main thread is running...");
        task.Wait(); // Wait for the task to complete
    }
}

Parallel.For と Parallel.ForEach の使用

Parallel.For と Parallel.ForEach の使用

C# のParallelクラスを使うと、パフォーマンスを向上させるためにループを並列実行できます。例:

重要なポイント:同時実行できるデータ集約型のタスクには、Parallel.ForとParallel.ForEachを使用します。

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        Parallel.For(0, 5, i => {
            Console.WriteLine($"Processing {i} on thread {Task.CurrentId}");
        });

        Console.WriteLine("All tasks completed.");
    }
}

タスクでの例外処理

タスクでの例外処理

try-catchブロックまたはTask.Exceptionプロパティを使って、タスク内の例外を捕捉できます。例:

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        try {
            Task task = Task.Run(() => {
                throw new InvalidOperationException("Task failed!");
            });

            task.Wait();
        } catch (AggregateException ex) {
            Console.WriteLine("Error: " + ex.InnerException.Message);
        }
    }
}

練習課題

練習課題

複数のタスクを開始して数値を並列処理し、それぞれの平方を出力するプログラムを作成してください。例:

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        int[] numbers = { 1, 2, 3, 4, 5 };

        Parallel.ForEach(numbers, number => {
            Console.WriteLine($"Square of {number}: {number * number}");
        });
    }
}

スレッドとタスクのベストプラクティス

スレッドとタスクのベストプラクティス

ここでは、いくつかのベストプラクティスを紹介します。

  • 高水準の並行処理には、ThreadよりもTaskを優先します。
  • データ集約型の処理には、Parallelクラスを使用します。
  • 堅牢なアプリケーションを実現するため、例外を適切に処理します。
  • リソースの競合を避けるため、スレッドやタスクの数を制限します。

ヒント:I/O 操作が中心の場合は非同期プログラミングを使用し、CPU バウンドのタスクにはスレッドやタスクを使用します。

よくできました!

よくできました!

おめでとうございます!C#で並行プログラミングを行うための、スレッドとタスクの基本を学びました。次のレッスンでは、関数型プログラミングに役立つ強力な機能であるデリゲートとラムダ式について学びます。引き続きコーディングに取り組みましょう!

スレッドとタスクを理解する — イラスト10

よくある質問

「スレッドとタスクを理解する」レッスンは無料ですか?

はい。「スレッドとタスクを理解する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全5レッスンが含まれています。

「スレッドとタスクを理解する」で何を学びますか?

C#で並列処理を管理するスレッドとタスクを学びます ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/5です。

「スレッドとタスクを理解する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. C#のジェネリクス
  2. AsyncとAwait:非同期コードを扱う
  3. スレッドとタスクを理解する
  4. デリゲートとラムダを探る
  5. C#のリフレクションを理解する
← C# Academyに戻る