.NET Web应用中为什么要使用async/await异步编程

首页 / 常见问题 / 低代码开发 / .NET Web应用中为什么要使用async/await异步编程
作者:web开发平台 发布时间:24-12-31 13:56 浏览量:3419
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

.NET Web应用中要使用async/await异步编程的原因:1、能提高并发性;2、能降低资源占用;3、能提高应用程序的响应速度。能提高并发性是指在处理单个请求时,单线程的异步处理能够充分利用系统的 CPU 和 I/O 资源,提高并发性能。

一、.NET Web应用中要使用async/await异步编程的原因

1、能提高并发性

在处理单个请求时,单线程的异步处理能够充分利用系统的 CPU 和 I/O 资源,提高并发性能。

2、能降低资源占用

使用异步方法来替代阻塞方法可以在长时间等待 I/O 操作完成的过程中释放线程并降低 CPU 的占用率,减小内存占用并提高应用程序的可扩展性。这在处理大量并发请求时尤为重要。

3、能提高应用程序的响应速度

采用异步编程模型可以减少阻塞线程的等待时间,从而保证请求能更快速地得到处理并返回响应。

二、.NET Web介绍

.NET Web 是一组用于构建 Web 应用程序的 Microsoft 技术和框架。它包含了一系列的开发工具和平台,可以让开发人员使用各种语言和框架进行高效而灵活的 Web 应用程序开发。.NET Web 技术主要包括以下几个方面:

  • ASP.NET:是一种基于 .NET 技术的 Web 应用程序框架,可以使用多种编程语言(如 C#、VB.NET )进行开发,提供了丰富的功能和组件,如 Web 表单、Web 控件、Web 服务、MVC、Web-API 等。ASP.NET 提供可扩展性、可用性和容错能力强的 Web 应用开发体验。
  • .NET Core:是 .NET 框架的一个跨平台版本,支持 Windows、Linux 和 macOS 等操作系统,在 Web 开发中拥有广泛应用。.NET Core 具有高性能、灵活、可扩展性好、跨平台、开源等特点。
  • Entity Framework:是一个关系型数据库对象映射器(ORM)框架。使用 Entity Framework,开发者可以通过面向对象的方式访问和操作数据库,无需直接编写 SQL 语句,提高开发效率,同时也保证了生产环境下的安全性和可靠性。
  • Azure:是一套云计算平台和服务。Azure 提供了丰富的云服务,包括 Web 应用程序托管、云数据库服务、分析与数据、人工智能等。通过 Azure,开发人员可以快速构建高可用、高性能、高安全性的 Web 应用程序,并快速扩展应用程序的能力。

三、async/await异步编程

1、简介

async/await 是 Rust 的异步编程模型,是产生和运行并发任务的手段。一般而言,async 定义了一个可以并发执行的任务,而 await 则触发这个任务并发执行。Rust 中,async 用来创建 Future,await 来触发 Future 的调度和执行,并等待Future执行完毕。async/await 只是一个语法糖,它使用状态机将 Future 包装起来进行处理。

JavaScript 也是通过 async 的方式提供了异步编程,Rust 的 Future 跟 JavaScript 的 Promise 非常类似。它们的区别:

  • JavaScript 的 Promise 和线程类似,一旦创建就开始执行,对 Promise 的 await 只是等待这个Promise执行完成并得到结果
  • Rust 的 Future,只有在主动 await 后才开始执行

2、使用场景

对于存在IO密集型(例如从网路请求数据、访问数据库和写入到文件系统)和CPU密集型(例如大量的计算)的任务可以选择异步编程。

3、异步编程针对于IO密集型任务的优点

服务器端来说由于没有专门的用于阻止未完成任务的线程,因此服务器线程可以服务更多的Web请求。现模拟假设一个场景,有两台服务器,都只有5个线程可用于服务请求,一台运行异步代码,一台不运行异步代码。假设这两台服务器都接收6个并发请求,每个请求执行一个I/O操作,未运行异步代码的服务器必须对6个请求排队直到5个线程中的一个完成了I/O密集型工作并编写了响应。假如此时收到了20个请求,由于队列太长,服务器可能开始变慢。运行有异步代码的服务器也需要对6个请求排队,但由于使用了async 和 await,I/O密集型工作开始时,每个线程都会得到释放,无需等到工作结束,收到第20个请求时,传入请求队列将变得很小(如果其中还有请求的话),且服务器不会变慢。 由于I/O操作在CPU上几乎没有耗时,所以将整个CPU线程专用于执行几乎没有任何作用的工作将是一种资源浪费。

客户端来说使用了async和await对于客户端应用带来的最大好处在于提高了响应能力。例如:手机游戏等应用,在涉及IO时尽可能少的影响UI线程,这点至关重要。

4、异步编程针对于CPU密集型任务的优点

服务器端来说使用异步编程可以开启另外一个线程来处理这一个CPU密集型的任务,另外一个线程就有可能是多核CPU情况下的另一个核,从而充分的利用了多核CPU的优势。

客户端来说此优点和上述针对IO密集型任务的一致。

5、I/O密集型代码示例

private static readonly HttpClient s_client = new HttpClient(); 
 
static async Task Main(string[] args)
{
     Console.WriteLine("ThreadId:"+Thread.CurrentThread.ManagedThreadId);
     var result = await GetHtmlAsync();
     Console.WriteLine("内容长度:"+result.Length);
     Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId);
}
 
static Task<string> GetHtmlAsync()
{
     Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId);
     var uri = new Uri("https://www.dotnetfoundation.org");
     return s_client.GetStringAsync(uri);
}

6、CPU密集型代码示例

static async Task Main(string[] args)
{
    Console.WriteLine("Main1:" + Thread.CurrentThread.ManagedThreadId);
    Task<long> task = Task.Run(() => BigComputeTest());
    long result = 0;
    int sum = 0;
    for (int i = 0; i < 10000; i++)
    {
        sum += i;
    }
    Console.WriteLine("Main2:" + Thread.CurrentThread.ManagedThreadId);
    result = await task;
    Console.WriteLine($"sum:{sum},result:{result}");
    Console.WriteLine("Main3:" + Thread.CurrentThread.ManagedThreadId);
}
 
static long BigComputeTest()
{
    Console.WriteLine("BigComputeTest1:" + Thread.CurrentThread.ManagedThreadId);
    long sum = 0;
    for (long i = 0; i < 100000000; i++)
    {
        sum += i;
    }
    return sum;
}

延伸阅读1:.NET Framework简介

.NET 是一个开发平台,而 C# 是一种在 .NET 开发平台上使用的编程语言,目前能在 .NET 平台上使用的开发语言很多,例如 Visual Basic .NET、Python、J#、Visual C++.NET 等。但在 .NET 平台上使用非常多的是 C# 语言。.NET 框架的目的是便于开发人员容易地建立 Web 应用程序和 Web 服务,使得 Internet 上的各应用程序之间可以使用 Web 服务进行沟通。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

低代码开发平台报价:《低代码平台报价分析》
01-15 13:58
移动端低代码平台有哪些:《移动端低代码平台推荐》
01-15 13:58
PHP低代码平台:《PHP低代码平台应用》
01-15 13:58
哪些应用可以通过低代码实现:《低代码可实现的应用类型》
01-15 13:58
搭建低代码平台:《如何搭建低代码平台》
01-15 13:58
低代码平台企业:《低代码平台企业应用》
01-15 13:58
低代码应用开发平台:《低代码应用开发平台》
01-15 13:58
低代码云原生:《低代码与云原生结合》
01-15 13:58
国外比较成功的低代码厂商:《国外成功低代码厂商》
01-15 13:58

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流