C#异步1
一、异步编程的概念
在传统的同步编程中,代码是按照顺序依次执行的。例如,当一个方法执行一个长时间的操作(如网络请求、读取大型文件)时,程序会阻塞在这个操作上,直到操作完成才能继续执行后续的代码。而异步编程则允许程序在执行一个长时间操作时,不必等待该操作完成就可以继续执行其他任务。
就好比在餐厅里,同步是你亲自去厨房等待厨师为你做菜,只有拿到菜才能做下一件事;异步则是你点完菜后,服务员给你一个取餐器,你可以先找座位、聊天等,等餐做好取餐器提醒你再去取餐。
二、C# 中的异步模式 - 基于任务(Task)的异步编程(TAP)
Task 和 Task<TResult>类型
Task 类型:代表一个异步操作,没有返回值。例如,一个简单的异步日志记录方法可以返回Task
。假设我们有一个记录日志到服务器的方法:
public async Task LogToServerAsync()
{
// 假设这是一个网络操作,用于将日志发送到服务器
await SomeNetworkOperation();
}
async 和 await 关键字
async 关键字:用于修饰方法,表示这个方法是异步方法。它主要是告诉编译器这个方法内部可能会有await
操作,并且这个方法会被编译成一个状态机来管理异步操作。例如:
public async Task<int> CalculateAsync()
{
int result = await LongRunningCalculation();
return result;
}
await 关键字:是异步编程的关键部分。当遇到await
时,它会暂停当前异步方法的执行,直到等待的任务(Task
或Task<TResult>
)完成。在暂停期间,执行权会交回给调用者,当任务完成后,方法会从暂停的地方继续执行。例如,在上面的CalculateAsync
方法中,当执行到await LongRunningCalculation()
时,方法会暂停,直到LongRunningCalculation
这个任务完成,然后获取结果并继续执行后续代码。
C#练习27