登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
C# 异步编程:从 async/await 到 Task 并行库的全面解析 ...
C# 异步编程:从 async/await 到 Task 并行库的全面解析
[ 复制链接 ]
鄂缮输
2025-9-24 16:46:14
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
引言
在现代软件开发中,处理高并发和耗时操作是一个常见的挑战。C# 提供了强大的异步编程模型,它允许程序在执行耗时操作时不会阻塞主线程,从而提高程序的响应性和性能。其中,async/await 关键字和 Task 并行库是 C# 异步编程的核心组成部分。深入理解和掌握这些技术,对于开发高效、稳定的应用程序至关重要。本文将全面解析从 async/await 到 Task 并行库的相关知识,帮助开发者更好地运用 C# 进行异步编程。
正文
异步编程基础
在传统的同步编程中,程序按照顺序依次执行每一条语句。当遇到耗时操作时,主线程会被阻塞,直到操作完成才能继续执行后续代码。这在处理 I/O 密集型或 CPU 密集型任务时,会导致程序响应变慢,用户体验变差。而异步编程则允许程序在执行耗时操作时,将控制权交还给调用者,继续执行其他任务,当耗时操作完成后再回来处理结果。
async/await 关键字
基本概念
async 和 await 是 C# 引入的用于简化异步编程的关键字。async 用于修饰方法,表示该方法是一个异步方法。异步方法可以包含 await 表达式,用于等待一个 Task 或 Task 完成。当遇到 await 表达式时,异步方法会暂停执行,将控制权返回给调用者,直到等待的任务完成,然后继续执行后续代码。
示例代码
以下是一个简单的使用 async/await 的示例:
csharp
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("开始执行异步任务");
await LongRunningTask();
Console.WriteLine("异步任务执行完成");
}
static async Task LongRunningTask()
{
await Task.Delay(2000); // 模拟一个耗时 2 秒的操作
Console.WriteLine("耗时操作完成");
}
}
复制代码
在这个示例中,Main 方法被标记为 async,因为它调用了一个异步方法 LongRunningTask。LongRunningTask 方法内部使用 await Task.Delay(2000) 模拟了一个耗时 2 秒的操作。当执行到 await Task.Delay(2000) 时,LongRunningTask 方法会暂停执行,将控制权返回给 Main 方法,Main 方法可以继续执行其他任务。当 Task.Delay(2000) 完成后,LongRunningTask 方法会继续执行后续代码。
Task 并行库
Task 类
Task 类是 Task 并行库的核心,它表示一个异步操作。可以通过 Task.Run 方法创建一个新的 Task 来执行一个异步操作。例如:
csharp
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Console.WriteLine("开始执行任务");
Task task = Task.Run(() =>
{
// 模拟一个耗时操作
for (int i = 0; i < 1000000; i++)
{
// 一些计算密集型操作
}
Console.WriteLine("任务执行完成");
});
task.Wait(); // 等待任务完成
Console.WriteLine("程序结束");
}
}
复制代码
在这个示例中,Task.Run 方法接受一个 Action 委托,该委托包含了要执行的异步操作。task.Wait() 方法用于等待任务完成,确保主线程在任务完成后再继续执行后续代码。
Task 类
Task 是 Task 的泛型版本,它表示一个返回结果的异步操作。例如:
csharp
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("开始执行任务");
Task<int> task = CalculateAsync();
int result = await task;
Console.WriteLine($"任务结果: {result}");
}
static async Task<int> CalculateAsync()
{
await Task.Delay(2000); // 模拟一个耗时 2 秒的操作
return 42;
}
}
复制代码
在这个示例中,CalculateAsync 方法返回一个 Task,表示一个返回 int 类型结果的异步操作。在 Main 方法中,使用 await 关键字等待任务完成,并获取任务的结果。
并行任务处理
Task 并行库还提供了一些方法来处理多个并行任务,例如 Task.WhenAll 和 Task.WhenAny。
Task.WhenAll:等待所有指定的任务完成。
csharp
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Task task1 = Task.Run(() =>
{
// 模拟一个耗时操作
for (int i = 0; i < 1000000; i++)
{
// 一些计算密集型操作
}
Console.WriteLine("任务 1 完成");
});
Task task2 = Task.Run(() =>
{
// 模拟一个耗时操作
for (int i = 0; i < 1000000; i++)
{
// 一些计算密集型操作
}
Console.WriteLine("任务 2 完成");
});
await Task.WhenAll(task1, task2);
Console.WriteLine("所有任务完成");
}
}
复制代码
Task.WhenAny:等待任何一个指定的任务完成。
csharp
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Task task1 = Task.Run(() =>
{
// 模拟一个耗时操作
for (int i = 0; i < 1000000; i++)
{
// 一些计算密集型操作
}
Console.WriteLine("任务 1 完成");
});
Task task2 = Task.Run(() =>
{
// 模拟一个耗时操作
for (int i = 0; i < 1000000; i++)
{
// 一些计算密集型操作
}
Console.WriteLine("任务 2 完成");
});
Task completedTask = await Task.WhenAny(task1, task2);
Console.WriteLine("有一个任务完成");
}
}
复制代码
异步编程的应用场景
I/O 密集型任务
在处理 I/O 密集型任务时,如文件读写、网络请求等,异步编程可以显著提高程序的性能。因为在等待 I/O 操作完成时,程序可以继续执行其他任务,而不是阻塞主线程。例如,在一个 Web 应用程序中,使用异步编程处理数据库查询或 HTTP 请求,可以提高应用程序的并发处理能力。
CPU 密集型任务
对于 CPU 密集型任务,如复杂的计算、数据处理等,虽然异步编程本身不能直接提高 CPU 的处理速度,但可以通过并行执行多个任务,充分利用多核处理器的性能。例如,在一个图像处理应用程序中,可以使用 Task 并行库并行处理多个图像,提高处理效率。
结论
C# 的异步编程模型,特别是 async/await 关键字和 Task 并行库,为开发者提供了强大的工具来处理高并发和耗时操作。通过合理运用这些技术,可以提高程序的响应性和性能,提升用户体验。在实际开发中,需要根据具体的应用场景选择合适的异步编程方法,同时要注意处理异常和资源管理等问题,确保程序的稳定性和可靠性。开发者应该不断学习和实践,深入掌握 C# 异步编程的精髓,为开发高质量的应用程序打下坚实的基础。
GrapeCity Documents for Excel
Spread .NET
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
异步
编程
async
await
Task
相关帖子
async/await简单理解
2026 企业级 AI 编程实践手册Trae
不写代码,用扣子编程部署 OpenClaw + 飞书机器人
AI 编程工作流与协同范式
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
如何用游戏化设计让 AI 编程变得更好玩
VSCode + Copilot 保姆级 AI 编程实战教程,免费用 Claude,夯爆了!
当AI学会编程,我们还能做什么
AI编程时代,35岁以上程序员将何去何从?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
async/await简单理解
0
620
拍棹
2026-03-11
科技
2026 企业级 AI 编程实践手册Trae
0
495
郗新语
2026-03-12
安全
不写代码,用扣子编程部署 OpenClaw + 飞书机器人
0
20
禄磊
2026-03-13
业界
AI 编程工作流与协同范式
0
17
费卿月
2026-03-14
业界
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
0
21
步雪卉
2026-03-14
业界
如何用游戏化设计让 AI 编程变得更好玩
0
398
拴茅劾
2026-03-16
业界
VSCode + Copilot 保姆级 AI 编程实战教程,免费用 Claude,夯爆了!
0
86
哎禹供
2026-03-16
科技
当AI学会编程,我们还能做什么
0
491
黎瑞芝
2026-03-20
安全
AI编程时代,35岁以上程序员将何去何从?
0
635
剽达崖
2026-03-22
回复
(29)
宿遘稠
2026-1-1 23:11:39
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
肇默步
2026-1-2 08:09:42
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
劳暄美
2026-1-3 12:52:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
宗和玉
2026-1-17 03:01:14
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
何书艺
2026-1-17 22:07:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
米嘉怡
2026-1-19 13:06:15
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
蚬蕞遂
2026-1-21 02:16:14
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
铝缉惹
2026-1-22 10:03:13
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
喳谍
2026-1-23 06:37:04
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
甦忻愉
2026-1-23 06:49:30
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
恿榫
2026-1-25 03:24:25
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
豹筒生
2026-1-25 08:57:02
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
东郭欣然
2026-1-25 12:06:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
捡嫌
2026-1-26 08:36:09
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
上官银柳
2026-1-27 08:43:20
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
扒钒
2026-1-29 03:42:01
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
苗嘉惠
2026-2-5 04:51:37
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
方方仪
2026-2-8 06:00:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
挽幽
2026-2-9 17:26:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
科技
软件
代码
安全
签约作者
程序园优秀签约作者
发帖
鄂缮输
2026-2-9 17:26:38
关注
0
粉丝关注
19
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
506
【节点】[SampleTexture3D节点]原理解析与
166
记一次Webshell流量分析 | 添柴不加火
975
旧安卓手机部署openclaw
631
AI编程时代,35岁以上程序员将何去何从?
827
[Refactor]CPP Learn Data Day 1
0
Block Copy 的内存布局详解
613
把 Flask 搬进 ESP32,高中生自研嵌入式 We
5
渐得如意智能自动化办公平台——定义属于你
889
[AI/Agent/社交] AI Agent社交网络产品:Mo
526
C++协程入门
284
TCSSOFTDEPTCOPY.zip Can download source
801
Vue3 + Iframe 实战:打造企业级流程配置中
823
“你用AI,那我也会用AI,我还要你干什么?
621
自感痕迹论:先验意义场域与经验痕迹内外
9
一道KMP统考真题彻底讲透:nextval与滑动距
7
一道KMP统考真题彻底讲透:nextval与滑动距
741
从 Clubhouse 的崛起与陨落,看语聊房 RTC
244
老马失前蹄,竟然在数据库外键上翻车了,重
8
老马失前蹄,竟然在数据库外键上翻车了,重
7
老马失前蹄,竟然在数据库外键上翻车了,重