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

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

PHPz
リリース: 2024-02-18 12:03:24
オリジナル
633 人が閲覧しました

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 は戻り値の型です。例は次のとおりです。

    Task<int> task = Task.Run(() => {
     // 异步任务逻辑
     return 42;
    });
    
    int result = task.Result;
    ログイン後にコピー

    上記の例の Task<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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート