C# async 用法
时间: 2024-08-22 17:01:25 浏览: 46
C# async await使用方法
在C#中,`async` 关键字用于定义异步方法,使得方法可以异步执行而不会阻塞当前线程。一个使用 `async` 关键字的方法通常会配合 `await` 关键字来实现异步操作,使得异步方法在等待异步操作完成时可以挂起,直到操作完成后再继续执行。
异步方法通常返回一个 `Task` 或 `Task<T>` 对象,这代表了正在执行的操作。当异步方法使用 `async` 和 `await` 时,它遵循以下规则:
1. 异步方法必须有一个 `void`、`Task` 或 `Task<T>` 返回类型。
2. 异步方法内部可以使用 `await` 关键字来异步等待异步操作的完成。
3. `await` 关键字不能用于非 `async` 方法中。
4. 当异步方法被调用时,会返回一个 `Task` 或 `Task<T>` 实例,并立即返回到调用者。
5. 当调用的方法执行到一个 `await` 表达式时,它会返回一个 `Task` 或 `Task<T>` 对象给调用者,并且方法挂起,直到 `await` 表达式的结果可用。
6. 当 `await` 表达式的结果准备好后,方法会从挂起点继续执行。
下面是一个使用 `async` 和 `await` 的简单示例代码:
```csharp
public async Task MyAsyncMethod()
{
// 执行一些初始工作
// 异步等待一个耗时操作完成
var result = await SomeLongRunningOperationAsync();
// 使用耗时操作的结果继续执行
DoSomethingWithResult(result);
}
// 假设这是一个异步执行的方法,返回Task类型
public async Task<int> SomeLongRunningOperationAsync()
{
// 执行一些耗时操作
await Task.Delay(1000); // 模拟耗时操作,实际中可能是I/O操作或其他耗时任务
// 返回结果
return 42;
}
public void DoSomethingWithResult(int result)
{
// 使用结果做一些处理
}
```
阅读全文