C# タスクの詳細な説明、具体的なコード例が必要です
はじめに:
C# マルチスレッド プログラミングでは、タスクは実装に一般的に使用されるプログラミング モデルです。オペレーション。 Task は、同時タスクを処理する簡単な方法を提供し、複数のスレッドで非同期操作を並行して実行でき、例外と戻り値を簡単に処理できます。この記事では、C# タスクの使用方法を詳しく紹介し、いくつかの具体的なコード例を示します。
1. Task の作成と操作
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(() => { // 异步任务逻辑 });
タスクの開始と待機
タスクの作成が完了したら、Task を呼び出してタスクの実行を開始できます。 .Start
メソッド。その後、Task.Wait
メソッドを使用して、タスクが完了するのを待ちます。例は次のとおりです。
task.Start(); // 启动任务 task.Wait(); // 等待任务完成
Task.Run
または TaskFactory.StartNew
を使用してタスクが作成された場合、タスクは自動的に開始され、 Start
メソッドを呼び出す必要はありません。
タスクのキャンセル
場合によっては、実行中のタスクをキャンセルする必要があります。 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. タスクの例外処理と戻り値
例外処理
非同期タスクでは、例外が発生すると、デフォルトでタスクは直接例外をスローし、プログラムをクラッシュさせます。タスクで例外を処理するには、タスクで try...catch
ステートメントを使用して例外をキャッチし、例外ロジックを処理します。例は次のとおりです。
Task task = Task.Run(() => { try { // 异步任务逻辑 } catch (Exception ex) { // 异常处理逻辑 } });
戻り値
非同期タスクから戻り値を取得する必要がある場合があります。タスクの戻り値転送を実現するには、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 サイトの他の関連記事を参照してください。