Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 72|回复: 0

在 C# 中使用 Async/Await 进行异步编程

[复制链接]

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2024-1-15 13:23:49 | 显示全部楼层 |阅读模式
C# 中引入了和关键字async,await以使.NET 平台上的异步编程变得更加容易。这些关键字从根本上改变了大多数 C# 生态系统中代码的编写方式。异步编程已成为主流,ASP.NET Core 等现代框架是完全异步的。 Backward Skip 10s Play Video Forward Skip 10s 异步编程对 C# 生态系统产生了如此大的影响,事实证明它非常有价值。但首先什么是异步编程呢? 本文将介绍异步编程,展示async和await关键字的用法,讨论死锁陷阱,最后提供一些使用这些关键字重构阻塞 C# 代码的技巧。 让我们从术语开始。 并发、并行、异步 这三个术语有什么区别?它们都是多线程的应用,它们的定义重叠,并且经常互换使用。这就是为什么利用多线程的实现的术语可能会令人困惑。 Learn to Code with JavaScript 我们将详细介绍这些术语之间的细微差别,以便我们能够为异步编程提供清晰的定义。



让我们假设一个 GUI 应用程序作为示例。 同步执行:一件接着一件做事 用户单击按钮并等待应用程序完成对单击事件的处理。由于一次只能发生一件事,因此 UI 会停止响应,直到事件被完全处理为止。同样,当 UI 可用于用户输入时,应用程序无法在后台执行任何操作。 并发:同时做多 越南数据 件事 用户单击按钮,应用程序在后台触发一个单独的线程来同时执行满足用户请求所需的任务。启动后台线程后,负责处理 UI 事件的线程立即再次可用,从而保持 UI 响应。 并行:同时做某事的多个副本 用户指示应用程序处理文件夹中的所有文件。应用程序使用处理逻辑触发多个线程,并在这些线程之间分发文件。 异步:不必等待一项任务完成即可开始另一项任务 应用程序异步启动数据库查询。当查询正在进行时,它也开始异步读取文件。当这两个任务正在进行时,它会进行一些计算。



当所有这些任务完成后,它使用所有这三个操作的结果来更新 UI。 Learn to Code with JavaScript 异步编程 基于上面的术语,我们可以简单地定义异步编程如下: 执行线程不应等待 I/O 密集型或 CPU 密集型任务完成。 I/O 绑定操作的示例可以是文件系统访问、数据库访问或 HTTP 请求。CPU 密集型操作的示例可以是调整图像大小、转换文档或加密/解密数据。 好处 使用异步编程有几个好处: 通过在异步活动期间“暂停”执行并将线程释放回线程池来避免线程池饥饿 保持 UI 响应能力 并发可能带来的性能提升 异步编程模式 .NET 提供了三种执行异步操作的模式。 异步编程模型t模式,它通过使用两种方法来实现。 来自微软文档: 调用后应用程序可以继续在调用线程上执行指令,同时异步操作在不同的线程上进行。对于每次调用BeginOperationName,应用程序还应该调用EndOperationName以获取操作结果。





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2024-11-28 12:49 , Processed in 0.037156 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表