Task は、C# で非同期操作を表すために使用されるオブジェクトであり、System.Threading.Tasks 名前空間にあります。 Task は、同時非同期操作を処理するための高レベル API を提供し、.NET アプリケーションでの非同期コードの作成を容易にします。
Task は、C# で非同期操作を表すために使用されるオブジェクトであり、System.Threading.Tasks 名前空間にあります。 Task は、同時非同期操作を処理するための高レベル API を提供し、.NET アプリケーションでの非同期コードの作成を容易にします。以下に、Task の主な機能と使用法のいくつかについて詳しく説明します。
1. タスクの作成 Task.Run メソッドを使用すると、バックグラウンド スレッドで操作を実行し、その操作を表す Task オブジェクトを返すことができます。
csharp
Task task = Task.Run(() => { // 这里是后台线程上执行的代码 Console.WriteLine("Running in a separate thread."); });
2.タスクの完了を待つ
Task.Wait メソッドを使用して、1 つ以上の Task オブジェクトが完了するのを待つことができます。
csharp
task.Wait(); // 等待 task 完成
また、await キーワード (async メソッド内) を使用して、現在のスレッドをブロックせずにタスクが完了するのを非同期的に待つこともできます。
csharp
await task; // 异步等待 task 完成
3. タスクのステータス
タスク オブジェクトには、Created (作成済み)、WaitingForActivation (アクティブ化を待機中)、Running (実行中)、RanToCompletion などのいくつかの状態があります。 (完了まで実行)、Canceled (キャンセル)、および Faulted (エラーが発生しました)。 Task.Status プロパティを通じてタスクの現在のステータスを確認できます。
4. 例外処理
タスク内で例外が発生し、その例外がキャッチされなかった場合、タスクのステータスは Faulted になります。 Task.Exception プロパティを通じて例外情報にアクセスできます。 await を使用する場合、await 式は例外を再スローするため、try-catch ブロックで例外を処理する必要があります。
csharp
try { await task; } catch (AggregateException ae) { // 处理异常 }
5. タスクの戻り値
Task が計算または演算を表し、結果を返したい場合は、Taskb54c2c292509147c0b54128f4eb90887 を使用できます。ここで、TResult は戻り値のタイプです。
csharp
Task<int> taskWithResult = Task.Run(() => { // 执行一些计算 return 42; }); int result = await taskWithResult; // 异步等待并获取结果
6. タスクのキャンセル
CancelToken を使用して 1 つ以上のタスクをキャンセルできます。
csharp
CancellationTokenSource cts = new CancellationTokenSource(); Task cancellableTask = Task.Run(() => { for (int i = 0; i < 100; i++) { cts.Token.ThrowIfCancellationRequested(); // 执行一些操作 } }, cts.Token); // 在某个时刻取消任务 cts.Cancel();
7. タスクの組み合わせ
Task.WhenAll または Task.WhenAny を使用して、複数の Task オブジェクトが完了するのを待つことができます。 Task.WhenAll はすべてのタスクが完了するのを待ちますが、Task.WhenAny はいずれか 1 つのタスクが完了するのを待ちます。
csharp
Task task1 = Task.Run(() => { /* ... */ }); Task task2 = Task.Run(() => { /* ... */ }); Task allTasks = Task.WhenAll(task1, task2); await allTasks; // 等待所有任务完成 csharp Task firstTaskToComplete = Task.WhenAny(task1, task2); await firstTaskToComplete; // 等待任何一个任务完成
8. タスクの実行コンテキストを構成する
TaskScheduler を構成することで、タスクを実行するスレッドまたはスレッド プールを制御できます。これは、スレッドの使用をより詳細に制御する必要があるシナリオで役立ちます。
Task は、.NET で非同期プログラミングを処理するための強力なツールであり、特に I/O 集中型または計算集中型のタスクを扱う場合に、より応答性が高く効率的なコードを作成できます。タスクの基本概念と使用法を理解することで、非同期プログラミング モデルをより適切に活用して、アプリケーションのパフォーマンスとスケーラビリティを向上させることができます。
以上がC#Taskの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。