编辑
2025-09-24
C#
00

目录

摘要
正文
的async和await关键字展开。本文将讲解如何使用 .NET 异步编程及一些相关基础知识。
基本概念
编写异步代码

摘要

在面向服务的系统中,各个子系统之间通常采用异步方式进行通信,例如订单系统与支付系统之间的通信,以及现实生活中你在餐厅点菜、下单、做事、上菜、吃饭的过程,这些都是异步的。异步的工作流可以同时进行,因此它能够提高效率。现在的扫码点餐就是一个很好的异步例子,它将顾客点餐与厨师制作菜品的过程分离,使得这两个过程可以同时进行,从而提高了效率。在同步的世界里,工作流简单易懂,但效率却非常低。

正文

现代应用程序广泛使用文件和网络 I/O。I/O 相关 api 传统上默认是阻塞的,导致用户体验和硬件利用率不佳,此类问题的学习和编码的难度也较大。而今基于 Task 的异步 API 和语言级异步编程模式颠覆了传统模式,使得异步编程非常简单,几乎没有新的概念需要学习。

异步代码有如下特点:

  • 在等待 I/O 请求返回的过程中,通过让出线程来处理更多的服务器请求。
  • 通过在等待 I/O 请求时让出线程进行 UI 交互,并将长期运行的工作过渡到其他 CPU,使用户界面的响应性更强。
  • 许多较新的 .net API 都是异步的。
  • 在 .NET 中编写异步代码很容易。

使用 .NET 基于 Task 的异步模型可以直接编写 I/O 和 CPU 受限的异步代码。该模型围绕着Task和Task类型以及 C# 的async和await关键字展开。本文将讲解如何使用 .NET 异步编程及一些相关基础知识。

.NET Framework 提供了一个基于任务的异步模式 (TAP),它是构建异步操作的推荐方式。这种模式使用 System.Threading.Tasks.TaskSystem.Threading.Tasks.Task<TResult> 类来代表异步操作。这种模式不仅适用于 I/O 操作,还适用于那些可能会阻塞主线程的长时间运行的计算操作。通过使用 TAP,开发者可以编写出更加简洁、易于理解和维护的异步代码。

基本概念

  • Task: 代表一个异步操作。Task 类提供了一种方式来运行某些操作,并在操作完成时通知应用程序。对于无返回值的异步操作,使用 Task 类。
  • Task: 继承自 Task,代表有返回值的异步操作。TResult 是操作完成时返回的结果类型。

编写异步代码

  1. 使用 async 和 await 关键字: .NET 引入了 asyncawait 关键字简化异步编程。标记为 async 的方法称为异步方法,这些方法中可以使用 await 关键字等待异步操作的完成,而不会阻塞调用线程。
  2. 启动异步操作: 可以通过调用返回 TaskTask<TResult> 的方法来启动异步操作。如果方法支持异步版本,它通常以 "Async" 结尾。
  3. 等待异步操作完成: 在异步方法中,可以使用 await 关键字等待异步操作的完成,await 会暂停当前方法的执行,直到等待的 Task 完成,然后继续执行方法的剩余部分。期间,调用线程不会被阻塞,可以继续执行其他工作。

image.png

image.png

注意:异步不能提高单一业务的速度。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!