前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >等待多个异步任务的方法

等待多个异步任务的方法

作者头像
宿春磊Charles
发布于 2021-11-05 06:54:56
发布于 2021-11-05 06:54:56
2.6K0
举报
文章被收录于专栏:DotNet 致知DotNet 致知

这节来解释一下,在异步编程中,等待多个Task的几个方法。

WaitAll & WaitAny

Task.Wait(),这个是用来等待异步任务完成的一个方法,当我们有多个异步任务同时进行,需要等待所有异步任务完成或者等待某个异步任务完成的时候,就可以用WaitAll或WaitAny这两个方法,下面先看一段代码:

上图中,我创建了两个Task:taskF和taskS,这两个异步任务分别等待10秒和5秒,下方我使用了Task.WaitAll()方法来等待他们,我们通过Stopwatch的输出可以看到,从Start到Stop一共等待了约10秒。

使用WaitAll等待异步任务,在给它传入的所有异步任务完成前,它是会一直阻塞,所以上方的结果是10秒而不是5秒,下面我把WaitAll改为WaitAny,再看效果:

此时等待时间变为了约5秒,这就是WaitAny的作用,当异步任务中任一一个完成,即继续往下执行。

这两个Wait都是无返回值的,也就是不会捕获到异步任务的结果,如果需要捕获异步任务的结果,可以了解一下下面这两个方法:

WhenAll & WhenAny

这两个方法都有返回值,它们都返回一个Task对象,这个新的Task对象包裹着我们传入的Task对象类型,下面看代码:

还是两个异步方法,一个时间长,一个时间短,都是返回string,使用WhenAll,会返回一个Task<string[]>,也就是会捕获到所有异步任务的结果,返回数组的数据顺序跟传入参数的顺序一致,也就是说index为0的是第一个参数的异步返回值,以此类推。

WhenAny跟它略有不同:

它返回最早执行完毕的整个Task对象,而不单单是一个string。

这四个方法的使用还是要看具体的情景,异步编程是个很好用但也很难用好的东西,需要不断的切身体会。

本节到此结束...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet 致知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Asp.Net Core 轻松学-多线程之Task快速上手
    Task是从 .NET Framework 4 开始引入的一项基于队列的异步任务(TAP)模式,从 .NET Framework 4.5 开始,任何使用 async/await 进行修饰的方法,都会被认为是一个异步方法;实际上,这些异步方法都是基于队列的线程任务,从你开始使用 Task 去运行一段代码的时候,实际上就相当于开启了一个线程,默认情况下,这个线程数由线程池 ThreadPool 进行管理的。
梁规晓
2019/04/11
1.6K0
Asp.Net Core 轻松学-多线程之Task快速上手
C#多线程和异步(二)——Task和async/await详解
  同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法。
zls365
2021/02/26
7.1K0
聊聊多线程那一些事儿(task)之 一聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)
  多线程,一个多么熟悉的词汇,作为一名程序员,我相信无论是从事什么开发语言,都能够轻轻松松说出几种实现多线程的方式,并且在实际工作种也一定用到过多线程,比如:定时器、异步作业等等,如果你说你没有用过多线程,我怀疑你是不是一名程序员,哈哈。
小小许
2020/01/15
5720
聊聊多线程那一些事儿(task)之 一聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)
[C#] Task.CompletedTask和Task.Result什么时候用?
在学习C#中的Task方法时,可以知道Task启动一个异步线程方法可以用Task.Run()进行,具体可以参看附录部分。
科控物联
2023/09/01
2.2K0
[C#] Task.CompletedTask和Task.Result什么时候用?
《C#并发编程经典实例》笔记
1.前言 最近趁着项目的一段平稳期研读了不少书籍,其中《C#并发编程经典实例》给我的印象还是比较深刻的。当然,这可能是由于近段日子看的书大多嘴炮大于实际,如《Head First设计模式》《Cracking the coding interview》等,所以陡然见到一本打着“实例”旗号的书籍,还是挺让我觉得耳目一新。本着分享和加深理解的目的,我特地整理了一些笔记(主要是Web开发中容易涉及的内容,所以部分章节如数据流,RX等我看了看就直接跳过了),以供审阅学习。语言和技术的魅力,真是不可捉摸 2.开宗明义
潘成涛
2018/01/18
1.7K0
聊聊多线程那一些事儿(task)之 二 延续操作聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)
  hello,又见面啦,昨天我们简单的介绍了如何去创建和运行一个task、如何实现task的同步执行、如何阻塞等待task集合的执行完毕等待,昨天讲的是task的最基本的知识点,如果你没有看昨天的博客,也不要急,你可以点击下面的地址, 聊聊多线程哪一些事儿(task)之 一),先看看后,在回到这儿来继续交流学习今天的文章,谢谢!
小小许
2020/01/15
4300
聊聊多线程那一些事儿(task)之 二 延续操作聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)
C#5.0新增功能01 异步编程
  如果需要 I/O 绑定(例如从网络请求数据或访问数据库),则需要利用异步编程。 还可以使用 CPU 绑定代码(例如执行成本高昂的计算),对编写异步代码而言,这是一个不错的方案。C# 拥有语言级别的异步编程模型,它使你能轻松编写异步代码,而无需应付回叫或符合支持异步的库。 它遵循基于任务的异步模式 (TAP)。
张传宁IT讲堂
2019/09/17
2.4K0
C#:异步编程中的 async 和 await
async 和 await 在 C# 5.0 就已经引入了,用来处理异步编程,但之前用的相对较少,现在在 dotNet Core 时代,已经使用的非常普遍,很多的开源组件中提供了大量的后缀为 Async (异步)的方法。本文就简单讲讲 async 和 await。
oec2003
2020/11/19
2.6K0
C#:异步编程中的 async 和 await
关于C#异步编程你应该了解的几点建议
前段时间写了一篇关于C#异步编程入门的文章,你可以点击《C#异步编程入门看这篇就够了》查看。这篇文章我们来讨论下关于C#异步编程几个不成文的建议,希望对你写出高性能的异步编程代码有所帮助。注:本文的很多内容都是学习《Effective C#》的总结。
依乐祝
2019/12/30
1.1K0
C#多线程(14):任务基础②
上一篇,我们学习了任务的基础,学会多种方式场景任务和执行,异步获取返回结果等。上一篇讲述的知识比较多,这一篇只要是代码实践和示例操作。
痴者工良
2021/04/26
7240
【C# 基础精讲】Task和Task<T>的应用
当涉及异步编程时,Task 和 Task<T> 是C#中的重要概念。它们不仅是处理异步操作的关键类型,还提供了一些强大的功能和方法,使异步编程更加高效和灵活。在本文中,我们将深入探讨 Task 和 Task<T> 的应用,从创建、执行、等待到取消和异常处理等方面进行详细讨论,帮助您更好地理解如何在C#中应用这些类型。
繁依Fanyi
2023/10/12
7400
【C# 基础精讲】Task和Task<T>的应用
C Sharp(十五)
当程序启动时,系统就会在内存创建一个新进程。进程是构成程序的资源的集合,资源包括虚拟地址、文件句柄等。
1ess
2021/11/01
7680
C#的异步方法
在现代软件开发中,异步编程已成为提高应用程序性能和响应能力的关键技术。C# 通过 async 和 await 关键字提供了一种简洁而强大的异步编程模型。本文将深入探讨 C# 中异步方法的工作原理、使用场景、最佳实践以及潜在的陷阱。
Michel_Rolle
2024/10/09
2.5K0
并发编程 --- 异步方法的异常处理
因为 DontHandle() 方法在 ThrowAfter() 方法抛出异常之前,就已经执行完毕。
Niuery Diary
2023/10/22
3650
并发编程 --- 异步方法的异常处理
.NET如何避免让线程摸鱼,请用异步技术 async await 拿捏他~
而很多Web框架,收到一个请求,就会创建一个线程来处理,如果片刻间内有100个用户请求这个方法,那么就得安排100个线程,有没有方法让第1个线程在等待数据返回时,先去接待第N+1个用户(校验请求参数什么的)这样就能大大减少线程数量~
郑子铭
2023/08/29
2330
.NET如何避免让线程摸鱼,请用异步技术 async await 拿捏他~
C# 多线程编程入门教程
随着硬件性能的提升,尤其是多核CPU的广泛应用,多线程编程已经成为现代软件开发中的核心技能之一。多线程可以让程序在多个核心上并发运行,提高效率和性能。然而,编写多线程程序并不是一件简单的事情,尤其是要处理线程间的同步问题,以避免数据竞争和死锁等问题。
Michel_Rolle
2024/09/23
2.5K0
C# 并行和多线程编程——认识和使用Task
 对于多线程,我们经常使用的是Thread。在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别呢?
用户9127601
2021/11/01
8050
聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)聊聊多线程那一些事儿(ta
  hello,咋们又见面啦,通过前面两篇文章的介绍,对task的创建、运行、阻塞、同步、延续操作等都有了很好的认识和使用,结合实际的场景介绍,这样一来在实际的工作中也能够解决很大一部分的关于多线程的业务,但是只有这一些是远远不够的,比如,比如,如果这么一个场景,当开启tsak异步任务后,有某个条件触发,需要终止tsak的执行又该如何实现呢?这一些问题正是我们今天需要交流分享的部分,带着这一些问题,咱们共同进入到今天的主题,谢谢!
小小许
2020/01/15
7450
聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)聊聊多线程那一些事儿(ta
Task异常捕获的方式
当Task运行中出现了异常,正常情况下我们在主线程的Try是捕获不到的,而如果在Task内部写try,出现了异常我们会完全不知道。下面就来介绍几个主线程捕获Task异常的方法。
宿春磊Charles
2021/11/05
8930
浅谈.Net异步编程的前世今生----异步函数篇(完结)
上一篇我们着重讲解了TPL任务并行库,可以看出TPL已经很符合现代API的特性:简洁易用。但它的不足之处在于,使用者难以理解程序的实际执行顺序。
独立观察员
2022/12/06
6960
浅谈.Net异步编程的前世今生----异步函数篇(完结)
推荐阅读
Asp.Net Core 轻松学-多线程之Task快速上手
1.6K0
C#多线程和异步(二)——Task和async/await详解
7.1K0
聊聊多线程那一些事儿(task)之 一聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)
5720
[C#] Task.CompletedTask和Task.Result什么时候用?
2.2K0
《C#并发编程经典实例》笔记
1.7K0
聊聊多线程那一些事儿(task)之 二 延续操作聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)
4300
C#5.0新增功能01 异步编程
2.4K0
C#:异步编程中的 async 和 await
2.6K0
关于C#异步编程你应该了解的几点建议
1.1K0
C#多线程(14):任务基础②
7240
【C# 基础精讲】Task和Task<T>的应用
7400
C Sharp(十五)
7680
C#的异步方法
2.5K0
并发编程 --- 异步方法的异常处理
3650
.NET如何避免让线程摸鱼,请用异步技术 async await 拿捏他~
2330
C# 多线程编程入门教程
2.5K0
C# 并行和多线程编程——认识和使用Task
8050
聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)聊聊多线程那一些事儿(ta
7450
Task异常捕获的方式
8930
浅谈.Net异步编程的前世今生----异步函数篇(完结)
6960
相关推荐
Asp.Net Core 轻松学-多线程之Task快速上手
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文