async和await异步编程
async和await异步编程
通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力。 但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写、调试和维护。
使用 async/await 功能可以更轻松直观地编写异步程序。 你可以编写类似于同步代码的异步代码,并让编译器处理异步代码通常需要的疑难回调函数和延续。
UI线程
由于所有与用户界面相关的活动通常共享一个线程,因此,异步对访问 UI 线程的应用程序来说尤为重要。
命名约定
将“Async”追加到包含 async 修饰符的方法的名称后,方法内通常包含至少一个await表达式,该表达式标记一个点,在该点上,直到等待的异步操作完成方法才能继续。 同时,将方法挂起,并且控制返回到方法的调用方。
返回类型
Task或Task。
线程
异步方法旨在成为非阻止操作。 异步方法中的await表达式在等待的任务正在运行时不会阻止当前线程。 相反,表达式在继续时注册方法的其余部分并将控制返回到异步方法的调用方。async和await关键字不会创建其他线程(可以理解为工作的异步抽象,而非在线程之上的抽象);任务运行时,使用await在任务完成前将控制让步于其调用方,可让应用程序和服务执行有用工作。 任务完成后代码无需依靠回调或事件便可继续执行。
特点
等待I/O请求返回的同时,可通过生成处理更多请求的线程,处理更多的服务器请求;等待I/O请求的同时生成 UI 交互线程,并通过将长时间运行的工作转换到其他 CPU 核心,让 UI 的响应速度更快。
服务器
此模型可很好地处理典型的服务器方案工作负荷。 由于没有专用于阻止未完成任务的线程,服务器线程池可服务更多的 Web 请求。
客户端
对客户端应用带来的最大好处在于提高了响应能力。