ホームページ  >  記事  >  バックエンド開発  >  C#Taskの詳しい説明

C#Taskの詳しい説明

小老鼠
小老鼠オリジナル
2024-03-14 09:54:071301ブラウズ

Task は、C# で非同期操作を表すために使用されるオブジェクトであり、System.Threading.Tasks 名前空間にあります。 Task は、同時非同期操作を処理するための高レベル API を提供し、.NET アプリケーションでの非同期コードの作成を容易にします。

C#Taskの詳しい説明

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

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