在C中,`Task`类用于表示一个异步操作,它可以返回一个值,并且可以通过`Task`对象来监视操作的状态、等待其完成以及获取返回值(如果有的话)。以下是使用`Task`的一些常见方法:
创建和启动Task
使用`Task.Run`方法可以最简单地创建和启动一个任务。`Task.Run`会自动将一个`Action`或`Func`委托包装成一个任务并调度到线程池中执行。
```csharp
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// 使用Task.Run启动一个异步任务
Task task = Task.Run(() =>
{
// 这里是异步操作的代码
Console.WriteLine("Task is running on thread " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000); // 模拟耗时操作
});
// 等待任务完成
task.Wait();
Console.WriteLine("Main thread continues on thread " + Thread.CurrentThread.ManagedThreadId);
}
}
```
异步方法中使用`await`
在异步方法中,可以使用`await`关键字来等待`Task`的完成,并获取返回值。
```csharp
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
Task
// 在等待任务完成的同时,可以执行其他操作
Console.WriteLine("Doing other work...");
// 等待任务完成并获取结果
int result = await task;
Console.WriteLine($"The result is {result}");
}
static Task { return Task.Run(() => { // 模拟计算 System.Threading.Thread.Sleep(1000); return 42; }); } } ``` 如果异步操作需要返回一个结果,可以使用`Task ```csharp using System; using System.Threading.Tasks; class Program { static void Main() { // 创建一个带返回值的Task Task { // 模拟计算 System.Threading.Thread.Sleep(1000); return 42; }); // 等待任务完成并获取结果 int result = taskWithResult.Result; Console.WriteLine("Result: " + result); } } ``` 使用`Task.WaitAll`方法可以等待多个`Task`完成。 ```csharp using System; using System.Threading.Tasks; class Program { static void Main() { Task task1 = Task.Run(() => Console.WriteLine("Task 1 started")); Task task2 = Task.Run(() => Console.WriteLine("Task 2 started")); // 等待所有任务完成 Task.WaitAll(task1, task2); Console.WriteLine("All tasks completed."); } } ``` 使用`try-catch`块可以捕获和处理`Task`中发生的异常。 ```csharp using System; using System.Threading.Tasks; class Program { static void Main() { Task task = Task.Run(() => { // 模拟异常 throw new InvalidOperationException("An error occurred"); }); try { task.Wait(); } catch (InvalidOperationException ex) { Console.WriteLine("Caught exception: " + ex.Message); } } } ``` 这些示例展示了如何使用`Task`类来创建、启动、等待和获取异步操作的结果。根据具体的需求,可以选择合适的方法来实现并发编程。创建带返回值的Task
等待多个Task完成
处理Task的异常