定义

命名空间:

System.Threading.Tasks

程序集:

mscorlib.dll, netstandard.dll

等待所有提供的 Task 对象完成执行过程。

重载

重载
WaitAll(Task[])

等待提供的所有 Task 对象完成执行过程。

WaitAll(Task[], Int32)

等待所有提供的 Task 在指定的毫秒数内完成执行。

WaitAll(Task[], CancellationToken)

等待提供的所有 Task 对象完成执行过程(除非取消等待)。

WaitAll(Task[], TimeSpan)

等待所有提供的可取消 Task 对象在指定的时间间隔内完成执行。

WaitAll(Task[], Int32, CancellationToken)

等待提供的所有 Task 对象在指定的毫秒数内完成执行,或等到取消等待。

WaitAll(Task[])

等待提供的所有 Task 对象完成执行过程。

C#复制

public static void WaitAll (params System.Threading.Tasks.Task[] tasks);

参数

tasks

Task[]

要等待的 Task 实例的数组。

例外

ObjectDisposedException

tasks 中的一个或多个 Task 对象已释放。

ArgumentNullException

tasks 参数为 null

ArgumentException

tasks 参数包含一个 null 元素。

AggregateException

至少一个 Task 实例已取消。 如果任务取消,则 AggregateException 异常在其 InnerExceptions 集合中包含 OperationCanceledException 异常。

- 或 - 在至少一个 Task 实例的执行过程中引发了异常。

示例

下面的示例启动了10个任务,其中每个任务都作为状态对象传递了一个索引。 索引为2到5的任务引发异常。 对方法的调用 WaitAll 会包装对象中的所有异常 AggregateException ,并将其传播到调用线程。

C#复制

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;class Example
{static void Main(){var tasks = new List<Task<int>>();// Define a delegate that prints and returns the system tick countFunc<object, int> action = (object obj) =>{int i = (int)obj;// Make each thread sleep a different time in order to return a different tick countThread.Sleep(i * 100);// The tasks that receive an argument between 2 and 5 throw exceptionsif (2 <= i && i <= 5){throw new InvalidOperationException("SIMULATED EXCEPTION");}int tickCount = Environment.TickCount;Console.WriteLine("Task={0}, i={1}, TickCount={2}, Thread={3}", Task.CurrentId, i, tickCount, Thread.CurrentThread.ManagedThreadId);return tickCount;};// Construct started tasksfor (int i = 0; i < 10; i++){int index = i;tasks.Add(Task<int>.Factory.StartNew(action, index));}try{// Wait for all the tasks to finish.Task.WaitAll(tasks.ToArray());// We should never get to this pointConsole.WriteLine("WaitAll() has not thrown exceptions. THIS WAS NOT EXPECTED.");}catch (AggregateException e){Console.WriteLine("\nThe following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)");for (int j = 0; j < e.InnerExceptions.Count; j++){Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());}}}
}
// The example displays output like the following:
//     Task=1, i=0, TickCount=1203822250, Thread=3
//     Task=2, i=1, TickCount=1203822359, Thread=4
//     Task=7, i=6, TickCount=1203823484, Thread=3
//     Task=8, i=7, TickCount=1203823890, Thread=4
//     Task=9, i=8, TickCount=1203824296, Thread=3
//     Task=10, i=9, TickCount=1203824796, Thread=4
//
//     The following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)
//
//     -------------------------------------------------
//     System.InvalidOperationException: SIMULATED EXCEPTION
//        at Example.<Main>b__0(Object obj)
//        at System.Threading.Tasks.Task`1.InnerInvoke()
//        at System.Threading.Tasks.Task.Execute()
//
//     -------------------------------------------------
//     System.InvalidOperationException: SIMULATED EXCEPTION
//        at Example.<Main>b__0(Object obj)
//        at System.Threading.Tasks.Task`1.InnerInvoke()
//        at System.Threading.Tasks.Task.Execute()
//
//     -------------------------------------------------
//     System.InvalidOperationException: SIMULATED EXCEPTION
//        at Example.<Main>b__0(Object obj)
//        at System.Threading.Tasks.Task`1.InnerInvoke()
//        at System.Threading.Tasks.Task.Execute()
//
//     -------------------------------------------------
//     System.InvalidOperationException: SIMULATED EXCEPTION
//        at Example.<Main>b__0(Object obj)
//        at System.Threading.Tasks.Task`1.InnerInvoke()
//        at System.Threading.Tasks.Task.Execute()

适用于

.NET 6 和其他版本

WaitAll(Task[], Int32)

等待所有提供的 Task 在指定的毫秒数内完成执行。

C#复制

public static bool WaitAll (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout);

参数

tasks

Task[]

要等待的 Task 实例的数组。

millisecondsTimeout

Int32

等待的毫秒数,或为 Infinite (-1),表示无限期等待。

返回

Boolean

如果在分配的时间内所有 true 实例都已完成执行,则为 Task;否则为 false

例外

ObjectDisposedException

tasks 中的一个或多个 Task 对象已释放。

ArgumentNullException

tasks 参数为 null

AggregateException

至少一个 Task 实例已取消。 如果任务已取消,则 AggregateException 在其 InnerExceptions 集合中包含 OperationCanceledException。

- 或 - 在至少一个 Task 实例的执行过程中引发了异常。

ArgumentOutOfRangeException

millisecondsTimeout 是一个非 -1 的负数,而 -1 表示无限期超时。

ArgumentException

tasks 参数包含一个 null 元素。

适用于

.NET 6 和其他版本

WaitAll(Task[], CancellationToken)

等待提供的所有 Task 对象完成执行过程(除非取消等待)。

C#复制

public static void WaitAll (System.Threading.Tasks.Task[] tasks, System.Threading.CancellationToken cancellationToken);

参数

tasks

Task[]

要等待的 Task 实例的数组。

cancellationToken

CancellationToken

等待任务完成期间要观察的 CancellationToken。

例外

OperationCanceledException

已取消 cancellationToken

ArgumentNullException

tasks 参数为 null

AggregateException

至少一个 Task 实例已取消。 如果任务已取消,则 AggregateException 在其 InnerExceptions 集合中包含 OperationCanceledException。

- 或 - 在至少一个 Task 实例的执行过程中引发了异常。

ArgumentException

tasks 参数包含一个 null 元素。

ObjectDisposedException

tasks 中的一个或多个 Task 对象已释放。

注解

cancellationToken参数用于取消等待操作。 取消任务是一种不同的操作,并由发出信号,如上所述 AggregateException 。

适用于

.NET 6 和其他版本

WaitAll(Task[], TimeSpan)

等待所有提供的可取消 Task 对象在指定的时间间隔内完成执行。

C#复制

public static bool WaitAll (System.Threading.Tasks.Task[] tasks, TimeSpan timeout);

参数

tasks

Task[]

要等待的 Task 实例的数组。

timeout

TimeSpan

表示等待毫秒数的 TimeSpan,或表示 -1 毫秒(无限期等待)的 TimeSpan。

返回

Boolean

如果在分配的时间内所有 true 实例都已完成执行,则为 Task;否则为 false

例外

ObjectDisposedException

tasks 中的一个或多个 Task 对象已释放。

ArgumentNullException

tasks 参数为 null

AggregateException

至少一个 Task 实例已取消。 如果任务已取消,则 AggregateException 在其 InnerExceptions 集合中包含 OperationCanceledException。

- 或 - 在至少一个 Task 实例的执行过程中引发了异常。

ArgumentOutOfRangeException

timeout 为 -1 毫秒以外的负数,表示无限期超时。 - 或 - timeout 大于 MaxValue。

ArgumentException

tasks 参数包含一个 null 元素。

适用于

.NET 6 和其他版本

WaitAll(Task[], Int32, CancellationToken)

等待提供的所有 Task 对象在指定的毫秒数内完成执行,或等到取消等待。

C#复制

public static bool WaitAll (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);

参数

tasks

Task[]

要等待的 Task 实例的数组。

millisecondsTimeout

Int32

等待的毫秒数,或为 Infinite (-1),表示无限期等待。

cancellationToken

CancellationToken

等待任务完成期间要观察的 CancellationToken。

返回

Boolean

如果在分配的时间内所有 true 实例都已完成执行,则为 Task;否则为 false

例外

ObjectDisposedException

tasks 中的一个或多个 Task 对象已释放。

ArgumentNullException

tasks 参数为 null

AggregateException

至少一个 Task 实例已取消。 如果任务已取消,则 AggregateException 在其 InnerExceptions 集合中包含 OperationCanceledException。

- 或 - 在至少一个 Task 实例的执行过程中引发了异常。

ArgumentOutOfRangeException

millisecondsTimeout 是一个非 -1 的负数,而 -1 表示无限期超时。

ArgumentException

tasks 参数包含一个 null 元素。

OperationCanceledException

已取消 cancellationToken

注解

cancellationToken参数用于取消等待操作。 取消任务是一种不同的操作,并按上面所述的方式发出通知 AggregateException 。

适用于

.NET 6 和其他版本

C# Task.WaitAll 方法相关推荐

  1. NET问答: 多个 await 和 Task.WaitAll 是等价的吗?

    咨询区 vidalsasoon: 我有下面两个方法: MethodA: 使用多个 await 方式 public async Task<IHttpActionResult> MethodA ...

  2. .net中Task.WaitAll和WaitAny同步的等待Task完成

    前面讲了<.net中async/await异步编程>,如果方法中使用了多个异步方法,该如何同步的等待Task完成? Task.WaitAll 等待提供的所有 System.Threadin ...

  3. Task.Delay()方法

    Task.Delay方法只会延缓异步方法中后续部分执行时间,当程序执行到await表达时,一方面会立即返回调用方法,执行调用方法中的剩余部分,这一部分程序的执行不会延长.另一方面根据Delay()方法 ...

  4. WaitHandle.WaitAll 方法在WPF工程中的应用

    <?xml version="1.0" encoding="UTF-8"?> 因为WaiAll需要多线程支持, 而WPF是STA模式, 可以通过以下 ...

  5. C#Task执行线程及其相关问题

    对于多线程,我们经常使用的是Thread.在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于"任务的编程模型" ...

  6. 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结

    5天玩转C#并行和多线程编程 -- 第五天 多线程编程大总结 5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 -- 第一天 认识Parallel 5天玩转C#并行和多线程编程 ...

  7. dnet 并行编程学习总结

    .Net并行编程高级教程--Parallel http://www.cnblogs.com/stoneniqiu/p/4857021.html 一直觉得自己对并发了解不够深入,特别是看了<代码整 ...

  8. 对比Java和.NET多线程编程

    这篇文章以对比的方式总结Java和.NET多线程编程. 基本概念 多线程:很多开发语言都提供多线程编程支持,比如Java,C#. 并发(concurrent):即使对于单核CPU,我们也会采用多线程等 ...

  9. 第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)

    一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案. 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 ...

最新文章

  1. relocation R_X86_64_32S against `.data‘ can not be used when making a PIE object; recompile with -fP
  2. .net多线程 Thread
  3. Python 析构方法__del__
  4. 【Android OpenGL ES 开发 (零)】创建一个新的工程
  5. 深度相机(二)--结构光深度测距
  6. 计算机科学技术考研内容,计算机科学技术考研考什么科目
  7. mysql查看数据库所占用的空间
  8. grads插值_利用grads描述文件中的pdef做插值的实用方法,转模式的同学看过来~~...
  9. 写给应届毕业生-------五险一金以及个人所得税缴纳计算
  10. 链游:不要只争朝夕,要寄望百年
  11. 90后程序英雄季逸超
  12. python应用内部审计_软件机器人实现内部审计自动化变革,助力企业转型数字化审计...
  13. 漫谈阿里那些大数据技术,大数据学习者必看
  14. java and运算_JAVA中逻辑运算符“|”和“”与“||”和“”的用法
  15. echarts3在Y轴上做基准线
  16. unity3d俄罗斯方块源码教程+源码和程序下载
  17. 《点石成金》 思维导图
  18. Mysql 内置函数大全
  19. 算法笔记——基数排序
  20. 信用卡还款高峰到来小心多付冤枉钱

热门文章

  1. ramos+装u盘+linux,一键制作SCSI+WIMBOOT RAMOS P驱单镜像内存系统工具V1.8
  2. 2019中兴迪杰斯特拉比赛回顾与分析
  3. web安全测试---AppScan扫描工具详解和测试方法说明
  4. 两个网段共享打印机_不同网段共享打印机怎么设置?不同网段共享打印机设置方法【详解】...
  5. ThreeJS从实战到源码 - 创建场景
  6. TypeScript1-TypeScript 简介及环境搭建
  7. MAX78000FTHR 板卡入门
  8. (附源码)SSM+mysql+微信小程序网易云音乐设计与实现 毕业设计261620
  9. 按照打印机会多出来一个副本_安装打印机驱动后为什么出现副本?
  10. 《游戏设计艺术(第2版)》——学习笔记(30)第30章 设计师要向客户推销自己的想法