C# Task Code
时间: 2025-01-02 20:13:54 浏览: 9
### C# 中 `Task` 的使用示例
#### 创建并启动异步任务
通过创建和启动一个简单的异步任务来展示如何利用 `Task` 进行并发编程。
```csharp
using System;
using System.Threading.Tasks;
public class Program {
public static void Main() {
Task myTask = new Task(() => Console.WriteLine("This is a simple task"));
myTask.Start();
myTask.Wait(); // 等待任务完成再继续主线程
// 或者更简洁的方式直接运行任务
Task.Run(() => Console.WriteLine("Another way to start a task")).Wait();
// 返回结果的任务
Task<int> resultTask = Task.Run(() => SumNumbers(5, 7));
int sumResult = resultTask.Result; // 获取返回的结果
Console.WriteLine($"Sum of numbers: {sumResult}");
}
private static int SumNumbers(int num1, int num2) {
return num1 + num2;
}
}
```
#### 处理多个任务
当有多个独立的操作需要同时执行时,可以通过 `WhenAll` 方法等待所有任务完成后处理它们的结果。
```csharp
using System;
using System.Linq;
using System.Threading.Tasks;
public class MultiTasksExample {
public static async Task ExecuteMultipleTasksAsync() {
var tasks = Enumerable.Range(0, 5).Select(i =>
Task.Run(async () => {
await Task.Delay(1000);
return $"Completed task #{i}";
})
).ToArray();
string[] results = await Task.WhenAll(tasks);
foreach (var result in results) {
Console.WriteLine(result);
}
}
}
```
#### 异步方法中的异常捕获
为了确保程序能够优雅地处理可能出现的错误,在调用 `await` 关键字的地方应该考虑加入 try-catch 块来进行异常管理。
```csharp
try {
await SomeMethodThatMayThrowExceptionAsync();
} catch (OperationCanceledException ex) {
Console.WriteLine("The operation was cancelled.");
} catch (AggregateException ae) when (ae.InnerExceptions.All(e => e is TimeoutException)) {
Console.WriteLine("One or more operations timed out.");
} finally {
// 清理资源等操作...
}
```
阅读全文