ホームページ >バックエンド開発 >C#.Net チュートリアル >C# のタスクをより深く理解する

C# のタスクをより深く理解する

PHPz
PHPzオリジナル
2024-02-18 12:03:24671ブラウズ

C# のタスクをより深く理解する

C# タスクの詳細な説明、具体的なコード例が必要です

はじめに:
C# マルチスレッド プログラミングでは、タスクは実装に一般的に使用されるプログラミング モデルです。オペレーション。 Task は、同時タスクを処理する簡単な方法を提供し、複数のスレッドで非同期操作を並行して実行でき、例外と戻り値を簡単に処理できます。この記事では、C# タスクの使用方法を詳しく紹介し、いくつかの具体的なコード例を示します。

1. Task の作成と操作

  1. Task オブジェクトの作成方法
    C# で Task オブジェクトを作成する方法は数多くありますが、よく使われるのは次の 3 つです。 :
    a. コンストラクターを使用して作成します:

    Task task = new Task(() => {
     // 异步任务逻辑
    });

    b. Task.Run メソッドを使用して作成します:

    Task task = Task.Run(() => {
     // 异步任务逻辑
    });

    c. TaskFactory を使用します.StartNewメソッドの作成:

    TaskFactory taskFactory = new TaskFactory();
    Task task = taskFactory.StartNew(() => {
     // 异步任务逻辑
    });
  2. タスクの開始と待機
    タスクの作成が完了したら、Task を呼び出してタスクの実行を開始できます。 .Start メソッド。その後、Task.Wait メソッドを使用して、タスクが完了するのを待ちます。例は次のとおりです。

    task.Start(); // 启动任务
    task.Wait(); // 等待任务完成

    Task.Run または TaskFactory.StartNew を使用してタスクが作成された場合、タスクは自動的に開始され、 Start メソッドを呼び出す必要はありません。

  3. タスクのキャンセル
    場合によっては、実行中のタスクをキャンセルする必要があります。 CancelToken を使用してタスクをキャンセルできます。例は次のとおりです。

    CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    CancellationToken cancellationToken = cancellationTokenSource.Token;
    
    Task task = Task.Run(() => {
     while (true) {
         // 检查任务是否被取消
         if (cancellationToken.IsCancellationRequested) {
             break;
         }
    
         // 异步任务逻辑
     }
    }, cancellationToken);
    
    // 取消任务
    cancellationTokenSource.Cancel();

    タスクのロジックで、 cancelToken.IspaymentRequested プロパティを定期的にチェックして、タスクをキャンセルする必要があるかどうかを判断します。

2. タスクの例外処理と戻り値

  1. 例外処理
    非同期タスクでは、例外が発生すると、デフォルトでタスクは直接例外をスローし、プログラムをクラッシュさせます。タスクで例外を処理するには、タスクで try...catch ステートメントを使用して例外をキャッチし、例外ロジックを処理します。例は次のとおりです。

    Task task = Task.Run(() => {
     try {
         // 异步任务逻辑
     }
     catch (Exception ex) {
         // 异常处理逻辑
     }
    });
  2. 戻り値
    非同期タスクから戻り値を取得する必要がある場合があります。タスクの戻り値転送を実現するには、Task<tresult></tresult>クラスを使用します。 TResult は戻り値の型です。例は次のとおりです。

    Task<int> task = Task.Run(() => {
     // 异步任务逻辑
     return 42;
    });
    
    int result = task.Result;

    上記の例の Task<int></int> は、タスクが整数を返すことを意味します。戻り値は、Task.Result プロパティを通じて取得できます。

3. タスクの並列実行
Task はタスクの並列実行を簡単に実装し、プログラムのパフォーマンスを向上させることができます。 C# には、並列プログラミングを簡素化するための Parallel クラスが用意されています。例は次のとおりです。

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// 并行执行计算
Parallel.ForEach(numbers, number => {
    Console.WriteLine(number * number);
});

上記の例では、Parallel.ForEach メソッドを使用して、数値のリストに対して二乗計算を並列実行します。異なる番号の計算タスクが異なるスレッド上で並行して実行できることがわかります。

概要:
この記事では、C# タスクの使用方法を詳しく紹介し、いくつかの具体的なコード例を示します。タスクを使用すると、非同期操作を簡単に実装し、プログラムの同時実行パフォーマンスを向上させることができます。同時に、Task は単純な例外処理と戻り値配信メカニズムも提供するため、同時プログラミングがより柔軟になり、保守が容易になります。この記事の紹介と例を通じて、読者の皆様が C# タスクについて理解を深め、実際のプロジェクトに柔軟に適用できるようになることを願っています。

以上がC# のタスクをより深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。