Task.WaitAll Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Ожидает завершения выполнения всех указанных объектов Task.
Перегрузки
WaitAll(Task[], Int32, CancellationToken) |
Ожидает завершения выполнения всех указанных объектов Task в течение указанного числа миллисекунд или до отмены ожидания. |
WaitAll(ReadOnlySpan<Task>) | |
WaitAll(Task[]) |
Ожидает завершения выполнения всех указанных объектов Task. |
WaitAll(IEnumerable<Task>, CancellationToken) | |
WaitAll(Task[], Int32) |
Ожидает завершения выполнения всех указанных объектов Task в течение указанного числа миллисекунд. |
WaitAll(Task[], CancellationToken) |
Ожидает завершения выполнения всех указанных объектов Task, пока ожидание не будет отменено. |
WaitAll(Task[], TimeSpan) |
Ожидает завершения выполнения всех указанных отменяемых объектов Task в течение указанного временного интервала. |
WaitAll(Task[], Int32, CancellationToken)
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
Ожидает завершения выполнения всех указанных объектов Task в течение указанного числа миллисекунд или до отмены ожидания.
public:
static bool WaitAll(cli::array <System::Threading::Tasks::Task ^> ^ tasks, int millisecondsTimeout, System::Threading::CancellationToken cancellationToken);
public static bool WaitAll (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool WaitAll (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);
static member WaitAll : System.Threading.Tasks.Task[] * int * System.Threading.CancellationToken -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : System.Threading.Tasks.Task[] * int * System.Threading.CancellationToken -> bool
Public Shared Function WaitAll (tasks As Task(), millisecondsTimeout As Integer, cancellationToken As CancellationToken) As Boolean
Параметры
- millisecondsTimeout
- Int32
Время ожидания в миллисекундах или функция Infinite (-1) в случае неограниченного времени ожидания.
- cancellationToken
- CancellationToken
Токен CancellationToken, который нужно контролировать во время ожидания выполнения задач.
Возвращаемое значение
true
, если все экземпляры Task завершили выполнение в выделенное время; в противном случае — значение false
.
- Атрибуты
Исключения
Один или несколько объектов Task в tasks
были удалены.
Аргумент tasks
имеет значение null
.
По крайней мере один из экземпляров Task был удален. Если задача была отменена, AggregateException содержит OperationCanceledException в коллекции InnerExceptions.
-или-
Возникло исключение во время выполнения по крайней мере одного из экземпляров Task.
Параметр millisecondsTimeout
является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.
Аргумент tasks
содержит элемент NULL.
Объект cancellationToken
отменен.
Комментарии
Аргумент cancellationToken
используется для отмены операции ожидания. Отмена задач является отдельной операцией, о чем свидетельствует указанное AggregateException выше.
Применяется к
WaitAll(ReadOnlySpan<Task>)
public:
static void WaitAll(ReadOnlySpan<System::Threading::Tasks::Task ^> tasks);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static void WaitAll (scoped ReadOnlySpan<System.Threading.Tasks.Task> tasks);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : ReadOnlySpan<System.Threading.Tasks.Task> -> unit
Public Shared Sub WaitAll (tasks As ReadOnlySpan(Of Task))
Параметры
- tasks
- ReadOnlySpan<Task>
- Атрибуты
Применяется к
WaitAll(Task[])
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
Ожидает завершения выполнения всех указанных объектов Task.
public:
static void WaitAll(... cli::array <System::Threading::Tasks::Task ^> ^ tasks);
public static void WaitAll (params System.Threading.Tasks.Task[] tasks);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static void WaitAll (params System.Threading.Tasks.Task[] tasks);
static member WaitAll : System.Threading.Tasks.Task[] -> unit
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : System.Threading.Tasks.Task[] -> unit
Public Shared Sub WaitAll (ParamArray tasks As Task())
Параметры
- Атрибуты
Исключения
Один или несколько объектов Task в tasks
были удалены.
Аргумент tasks
имеет значение null
.
Аргумент tasks
содержит элемент NULL.
По крайней мере один из экземпляров Task был удален. Если задача была отменена, AggregateException содержит исключение OperationCanceledException в коллекции InnerExceptions.
-или-
Возникло исключение во время выполнения по крайней мере одного из экземпляров Task.
Примеры
В следующем примере запускается 10 задач, каждая из которых передается индекс в виде объекта состояния. Задачи с индексом от двух до пяти создают исключения. Вызов метода создает оболочку WaitAll для всех исключений AggregateException в объекте и распространяет их в вызывающий поток.
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 count
Func<object, int> action = (object obj) =>
{
int i = (int)obj;
// Make each thread sleep a different time in order to return a different tick count
Thread.Sleep(i * 100);
// The tasks that receive an argument between 2 and 5 throw exceptions
if (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 tasks
for (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 point
Console.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()
open System
open System.Threading
open System.Threading.Tasks
// Define a delegate that prints and returns the system tick count
let action =
fun (obj: obj) ->
let i = obj :?> int
// Make each thread sleep a different time in order to return a different tick count
Thread.Sleep(i * 100)
// The tasks that receive an argument between 2 and 5 throw exceptions
if 2 <= i && i <= 5 then
raise (InvalidOperationException "SIMULATED EXCEPTION")
let tickCount = Environment.TickCount
printfn $"Task={Task.CurrentId}, i={i}, TickCount={tickCount}, Thread={Thread.CurrentThread.ManagedThreadId}"
tickCount
// Construct started tasks
let tasks =
[| for i = 0 to 9 do
Task<int>.Factory.StartNew (action, i) |]
try
// Wait for all the tasks to finish.
Seq.cast tasks |> Seq.toArray |> Task.WaitAll
// We should never get to this point
printfn "WaitAll() has not thrown exceptions. THIS WAS NOT EXPECTED."
with :? AggregateException as e ->
printfn "\nThe following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)"
for ex in e.InnerExceptions do
printfn $"\n-------------------------------------------------\n{ex}"
// 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()
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
Module WaitAllDemo
Sub Main()
Dim tasks As New List(Of Task(Of Integer))()
' Define a delegate that prints and returns the system tick count
Dim action As Func(Of Object, Integer) = Function(obj As Object)
Dim i As Integer = CInt(obj)
' Make each thread sleep a different time in order to return a different tick count
Thread.Sleep(i * 100)
' The tasks that receive an argument between 2 and 5 throw exceptions
If 2 <= i AndAlso i <= 5 Then
Throw New InvalidOperationException("SIMULATED EXCEPTION")
End If
Dim tickCount As Integer = Environment.TickCount
Console.WriteLine("Task={0}, i={1}, TickCount={2}, Thread={3}", Task.CurrentId, i, tickCount, Thread.CurrentThread.ManagedThreadId)
Return tickCount
End Function
' Construct started tasks
For i As Integer = 0 To 9
Dim index As Integer = i
tasks.Add(Task(Of Integer).Factory.StartNew(action, index))
Next
Try
' Wait for all the tasks to finish.
Task.WaitAll(tasks.ToArray())
' We should never get to this point
Console.WriteLine("WaitAll() has not thrown exceptions. THIS WAS NOT EXPECTED.")
Catch e As AggregateException
Console.WriteLine(vbLf & "The following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)")
For j As Integer = 0 To e.InnerExceptions.Count - 1
Console.WriteLine(vbLf & "-------------------------------------------------" & vbLf & "{0}", e.InnerExceptions(j).ToString())
Next
End Try
End Sub
End Module
' 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()
Применяется к
WaitAll(IEnumerable<Task>, CancellationToken)
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static void WaitAll (System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> tasks, System.Threading.CancellationToken cancellationToken = default);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : seq<System.Threading.Tasks.Task> * System.Threading.CancellationToken -> unit
Public Shared Sub WaitAll (tasks As IEnumerable(Of Task), Optional cancellationToken As CancellationToken = Nothing)
Параметры
- tasks
- IEnumerable<Task>
- cancellationToken
- CancellationToken
- Атрибуты
Применяется к
WaitAll(Task[], Int32)
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
Ожидает завершения выполнения всех указанных объектов Task в течение указанного числа миллисекунд.
public:
static bool WaitAll(cli::array <System::Threading::Tasks::Task ^> ^ tasks, int millisecondsTimeout);
public static bool WaitAll (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool WaitAll (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout);
static member WaitAll : System.Threading.Tasks.Task[] * int -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : System.Threading.Tasks.Task[] * int -> bool
Public Shared Function WaitAll (tasks As Task(), millisecondsTimeout As Integer) As Boolean
Параметры
- millisecondsTimeout
- Int32
Время ожидания в миллисекундах или функция Infinite (-1) в случае неограниченного времени ожидания.
Возвращаемое значение
true
, если все экземпляры Task завершили выполнение в выделенное время; в противном случае — значение false
.
- Атрибуты
Исключения
Один или несколько объектов Task в tasks
были удалены.
Аргумент tasks
имеет значение null
.
По крайней мере один из экземпляров Task был удален. Если задача была отменена, AggregateException содержит OperationCanceledException в коллекции InnerExceptions.
-или-
Возникло исключение во время выполнения по крайней мере одного из экземпляров Task.
Параметр millisecondsTimeout
является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.
Аргумент tasks
содержит элемент NULL.
Применяется к
WaitAll(Task[], CancellationToken)
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
Ожидает завершения выполнения всех указанных объектов Task, пока ожидание не будет отменено.
public:
static void WaitAll(cli::array <System::Threading::Tasks::Task ^> ^ tasks, System::Threading::CancellationToken cancellationToken);
public static void WaitAll (System.Threading.Tasks.Task[] tasks, System.Threading.CancellationToken cancellationToken);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static void WaitAll (System.Threading.Tasks.Task[] tasks, System.Threading.CancellationToken cancellationToken);
static member WaitAll : System.Threading.Tasks.Task[] * System.Threading.CancellationToken -> unit
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : System.Threading.Tasks.Task[] * System.Threading.CancellationToken -> unit
Public Shared Sub WaitAll (tasks As Task(), cancellationToken As CancellationToken)
Параметры
- cancellationToken
- CancellationToken
Токен CancellationToken, который нужно контролировать во время ожидания выполнения задач.
- Атрибуты
Исключения
Объект cancellationToken
отменен.
Аргумент tasks
имеет значение null
.
По крайней мере один из экземпляров Task был удален. Если задача была отменена, AggregateException содержит OperationCanceledException в коллекции InnerExceptions.
-или-
Возникло исключение во время выполнения по крайней мере одного из экземпляров Task.
Аргумент tasks
содержит элемент NULL.
Один или несколько объектов Task в tasks
были удалены.
Комментарии
Аргумент cancellationToken
используется для отмены операции ожидания. Отмена задач является отдельной операцией, о чем AggregateException свидетельствует , как указано выше.
Применяется к
WaitAll(Task[], TimeSpan)
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
- Исходный код:
- Task.cs
Ожидает завершения выполнения всех указанных отменяемых объектов Task в течение указанного временного интервала.
public:
static bool WaitAll(cli::array <System::Threading::Tasks::Task ^> ^ tasks, TimeSpan timeout);
public static bool WaitAll (System.Threading.Tasks.Task[] tasks, TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool WaitAll (System.Threading.Tasks.Task[] tasks, TimeSpan timeout);
static member WaitAll : System.Threading.Tasks.Task[] * TimeSpan -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member WaitAll : System.Threading.Tasks.Task[] * TimeSpan -> bool
Public Shared Function WaitAll (tasks As Task(), timeout As TimeSpan) As Boolean
Параметры
- timeout
- TimeSpan
Период TimeSpan, представляющий время ожидания в миллисекундах, или период TimeSpan, представляющий -1 миллисекунду для неограниченного ожидания.
Возвращаемое значение
true
, если все экземпляры Task завершили выполнение в выделенное время; в противном случае — значение false
.
- Атрибуты
Исключения
Один или несколько объектов Task в tasks
были удалены.
Аргумент tasks
имеет значение null
.
По крайней мере один из экземпляров Task был удален. Если задача была отменена, AggregateException содержит OperationCanceledException в коллекции InnerExceptions.
-или-
Возникло исключение во время выполнения по крайней мере одного из экземпляров Task.
timeout
является отрицательным числом, отличным от -1 миллисекунды, которое представляет неограниченное время ожидания.
-или-
timeout
больше , чем Int32.MaxValue.
Аргумент tasks
содержит элемент NULL.
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по