news 2026/5/24 8:01:02

C# Task异步编程的实现示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# Task异步编程的实现示例

Task 的基本概念

在 C# 中,Task是用于表示异步操作的类,属于System.Threading.Tasks命名空间。它提供了一种更简洁的方式来处理异步编程,避免了传统多线程编程的复杂性。Task可以返回结果(通过Task<TResult>)或仅表示操作完成(通过无返回值的Task)。

创建 Task

通过Task.RunTask.Factory.StartNew可以创建并启动一个任务。

1

2

3

4

5

6

7

8

9

// 无返回值的 Task

Task task = Task.Run(() => {

Console.WriteLine("任务执行中");

});

// 有返回值的 Task<int>

Task<int> taskWithResult = Task.Run(() => {

return42;

});

等待 Task 完成

使用awaitWait方法可以等待任务完成。

1

2

3

4

5

6

7

8

9

10

11

12

// 使用 await(需在 async 方法中)

async Task ExecuteTaskAsync() {

await Task.Run(() => {

Console.WriteLine("任务完成");

});

}

// 使用 Wait(阻塞当前线程)

Task task = Task.Run(() => {

Console.WriteLine("任务完成");

});

task.Wait();

获取 Task 结果

对于有返回值的Task<TResult>,可以通过Result属性获取结果。

1

2

3

4

5

Task<int> task = Task.Run(() => {

return42;

});

intresult = task.Result;// 阻塞直到任务完成

Console.WriteLine(result);// 输出 42

异常处理

Task可以捕获异步操作中的异常,通过AggregateException处理。

1

2

3

4

5

6

7

8

9

10

11

Task task = Task.Run(() => {

thrownewInvalidOperationException("任务出错");

});

try{

task.Wait();

}catch(AggregateException ex) {

foreach(var einex.InnerExceptions) {

Console.WriteLine(e.Message);

}

}

Task 的组合

Task.WhenAllTask.WhenAny可以组合多个任务。

1

2

3

4

5

6

7

8

Task task1 = Task.Run(() => {/* 任务1 */});

Task task2 = Task.Run(() => {/* 任务2 */});

// 等待所有任务完成

await Task.WhenAll(task1, task2);

// 等待任意一个任务完成

await Task.WhenAny(task1, task2);

取消 Task

通过CancellationToken可以取消任务。

1

2

3

4

5

6

7

8

9

10

11

CancellationTokenSource cts =newCancellationTokenSource();

Task task = Task.Run(() => {

while(true) {

if(cts.Token.IsCancellationRequested) {

break;// 取消任务

}

}

}, cts.Token);

// 取消任务

cts.Cancel();

异步方法中的 Task

async方法中,Task通常与await一起使用,实现非阻塞操作。

1

2

3

4

5

6

7

8

9

async Task<int> GetDataAsync() {

await Task.Delay(1000);// 模拟异步操作

return42;

}

async Task Main() {

intresult = await GetDataAsync();

Console.WriteLine(result);

}

到此这篇关于C# Task异步编程的实现示例的文章就介绍到这了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 7:58:19

弦图与范畴论:统一混合量子-经典机器学习的形式化框架

1. 项目概述与核心价值如果你正在关注量子计算与机器学习的交叉领域&#xff0c;尤其是那些被称为“混合量子-经典”的算法&#xff0c;你可能会发现一个有趣的现象&#xff1a;相关的论文和代码库常常在两种截然不同的“语言”之间切换。一边是描述量子线路的狄拉克符号、酉矩…

作者头像 李华
网站建设 2026/5/24 7:54:07

猫抓浏览器扩展:轻松下载在线视频资源的终极指南

猫抓浏览器扩展&#xff1a;轻松下载在线视频资源的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓&#xff08;cat-catch&#xff0…

作者头像 李华
网站建设 2026/5/24 7:47:48

标准单元行尾处理技术:ENDCAP与阱终止设计

1. 标准单元行尾处理技术解析在数字集成电路设计中&#xff0c;标准单元&#xff08;Standard Cell&#xff09;的物理实现需要解决一个关键问题&#xff1a;当标准单元行&#xff08;Row&#xff09;到达边界时&#xff0c;如何正确处理阱&#xff08;Well&#xff09;结构的终…

作者头像 李华
网站建设 2026/5/24 7:38:44

FreeTacMan系统:模块化触觉感知与多模态融合技术解析

1. FreeTacMan系统硬件架构解析FreeTacMan系统的硬件设计体现了模块化与轻量化的工程哲学。传感器主体通过主螺纹孔与夹持器基座刚性连接&#xff0c;这种设计可承受主要机械载荷。在相对侧&#xff0c;突出的定位结构与夹持器基座上的凹槽精密配合&#xff0c;实现了即插即用的…

作者头像 李华
网站建设 2026/5/24 7:37:18

Wireshark实战:5类真实攻击流量特征与精准过滤技巧

1. 这不是“黑客教程”&#xff0c;而是网络医生的听诊器使用手册Wireshark实战&#xff1a;5大黑客攻击流量特征曝光&#xff01;附抓包过滤秘籍——这句话里藏着三个被严重误解的关键词&#xff1a;“黑客”“攻击”“曝光”。我带过二十多个企业级网络安全加固项目&#xff…

作者头像 李华
网站建设 2026/5/24 7:36:33

稀疏矩阵:深度学习三大架构的统一数学语言

1. 稀疏矩阵&#xff1a;深度学习架构的统一数学语言在深度学习领域&#xff0c;卷积神经网络(CNN)、循环神经网络(RNN)和Transformer长期被视为三种截然不同的架构范式。但当我们透过表象看本质&#xff0c;会发现它们共享着相同的数学内核——稀疏矩阵运算。这种统一性不仅具…

作者头像 李华