c# Task 调用 代码
时间: 2024-10-09 10:01:16 浏览: 23
C# MVC TASK异步调用测试!
在 C# 中,`Task` 是用于表示异步操作的对象。创建和管理异步任务的一般过程如下:
1. **创建 Task**:你可以通过调用 `Task.Run()` 来立即开始一个新的工作线程执行同步或异步代码,或者直接从 `async` 方法内部创建 `Task`,如 `return Task.Factory.StartNew(() => { ... })`。
2. **等待 Task 完成**:如果你想等待任务完成,可以直接使用 `await` 关键字,如 `await Task.Delay(1000);` 表示延迟1秒。如果你希望在某个地方阻塞直到任务完成,可以使用 `await task` 或 `task.Wait();`。
3. **取消 Task**:`Task` 提供了 `CancellationTokenSource` 来允许取消任务,例如 `using (var tokenSource = new CancellationTokenSource())`,然后使用 `tokenSource.Cancel()` 可以中断任务。
4. **处理结果**:`Task` 或 `Task<T>` 在完成时会有一个结果。对于 `Task<T>`, 你可以使用 `.Result` 或者 `.GetAwaiter().GetResult()` 获取结果。但是这种方式可能会抛出异常,推荐使用 `await` 的方式来获取结果,因为它可以处理异常并提供更好的错误处理机制。
下面是一个简单的异步方法的例子:
```csharp
public async Task<string> DownloadDataAsync()
{
try
{
var client = new HttpClient();
var response = await client.GetAsync("https://example.com/data");
response.EnsureSuccessStatusCode();
using (var content = response.Content)
{
return await content.ReadAsStringAsync();
}
}
catch (Exception ex)
{
// Handle exceptions here
return null;
}
}
// 调用示例
string data = await DownloadDataAsync();
```
阅读全文