Поделиться через


Task.WaitAny Метод

Определение

Ожидает завершения выполнения любого из указанных объектов Task.

Перегрузки

WaitAny(Task[], TimeSpan)

Ожидает завершения выполнения любого из указанных отменяемых объектов Task в течение указанного временного интервала.

WaitAny(Task[], Int32, CancellationToken)

Ожидает завершения выполнения всех указанных объектов Task в течение указанного числа миллисекунд или до отмены токена отмены.

WaitAny(Task[], Int32)

Ожидает завершения выполнения любого из указанных объектов Task в течение указанного числа миллисекунд.

WaitAny(Task[], CancellationToken)

Ожидает завершения выполнения всех указанных объектов Task, пока ожидание не будет отменено.

WaitAny(Task[])

Ожидает завершения выполнения любого из указанных объектов Task.

WaitAny(Task[], TimeSpan)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Ожидает завершения выполнения любого из указанных отменяемых объектов Task в течение указанного временного интервала.

public:
 static int WaitAny(cli::array <System::Threading::Tasks::Task ^> ^ tasks, TimeSpan timeout);
public static int WaitAny (System.Threading.Tasks.Task[] tasks, TimeSpan timeout);
static member WaitAny : System.Threading.Tasks.Task[] * TimeSpan -> int
Public Shared Function WaitAny (tasks As Task(), timeout As TimeSpan) As Integer

Параметры

tasks
Task[]

Массив экземпляров Task, завершения выполнения которых следует дождаться.

timeout
TimeSpan

Период TimeSpan, представляющий время ожидания в миллисекундах, или период TimeSpan, представляющий -1 миллисекунду для неограниченного ожидания.

Возвращаемое значение

Индекс завершенной задачи в аргументе-массиве tasks или -1, если истекло время ожидания.

Исключения

Объект Task удален.

Аргумент tasks имеет значение null.

Параметр TotalMilliseconds аргумента timeout является отрицательным числом, отличающимся от -1, которое представляет неограниченное время ожидания.

-или-

Свойство TotalMilliseconds аргумента timeout больше Int32.MaxValue.

Аргумент tasks содержит элемент NULL.

Применяется к

WaitAny(Task[], Int32, CancellationToken)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Ожидает завершения выполнения всех указанных объектов Task в течение указанного числа миллисекунд или до отмены токена отмены.

public:
 static int WaitAny(cli::array <System::Threading::Tasks::Task ^> ^ tasks, int millisecondsTimeout, System::Threading::CancellationToken cancellationToken);
public static int WaitAny (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);
static member WaitAny : System.Threading.Tasks.Task[] * int * System.Threading.CancellationToken -> int
Public Shared Function WaitAny (tasks As Task(), millisecondsTimeout As Integer, cancellationToken As CancellationToken) As Integer

Параметры

tasks
Task[]

Массив экземпляров Task, завершения выполнения которых следует дождаться.

millisecondsTimeout
Int32

Время ожидания в миллисекундах или функция Infinite (-1) в случае неограниченного времени ожидания.

cancellationToken
CancellationToken

Токен CancellationToken, который нужно контролировать во время ожидания выполнения задачи.

Возвращаемое значение

Индекс завершенной задачи в аргументе-массиве tasks или -1, если истекло время ожидания.

Исключения

Объект Task удален.

Аргумент tasks имеет значение null.

Параметр millisecondsTimeout является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.

Аргумент tasks содержит элемент NULL.

Объект cancellationToken отменен.

Применяется к

WaitAny(Task[], Int32)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Ожидает завершения выполнения любого из указанных объектов Task в течение указанного числа миллисекунд.

public:
 static int WaitAny(cli::array <System::Threading::Tasks::Task ^> ^ tasks, int millisecondsTimeout);
public static int WaitAny (System.Threading.Tasks.Task[] tasks, int millisecondsTimeout);
static member WaitAny : System.Threading.Tasks.Task[] * int -> int
Public Shared Function WaitAny (tasks As Task(), millisecondsTimeout As Integer) As Integer

Параметры

tasks
Task[]

Массив экземпляров Task, завершения выполнения которых следует дождаться.

millisecondsTimeout
Int32

Время ожидания в миллисекундах или функция Infinite (-1) в случае неограниченного времени ожидания.

Возвращаемое значение

Индекс завершенной задачи в аргументе-массиве tasks или -1, если истекло время ожидания.

Исключения

Объект Task удален.

Аргумент tasks имеет значение null.

Параметр millisecondsTimeout является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.

Аргумент tasks содержит элемент NULL.

Применяется к

WaitAny(Task[], CancellationToken)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Ожидает завершения выполнения всех указанных объектов Task, пока ожидание не будет отменено.

public:
 static int WaitAny(cli::array <System::Threading::Tasks::Task ^> ^ tasks, System::Threading::CancellationToken cancellationToken);
public static int WaitAny (System.Threading.Tasks.Task[] tasks, System.Threading.CancellationToken cancellationToken);
static member WaitAny : System.Threading.Tasks.Task[] * System.Threading.CancellationToken -> int
Public Shared Function WaitAny (tasks As Task(), cancellationToken As CancellationToken) As Integer

Параметры

tasks
Task[]

Массив экземпляров Task, завершения выполнения которых следует дождаться.

cancellationToken
CancellationToken

Токен CancellationToken, который нужно контролировать во время ожидания выполнения задачи.

Возвращаемое значение

Индекс завершенной задачи в аргументе-массиве tasks.

Исключения

Объект Task удален.

Аргумент tasks имеет значение null.

Аргумент tasks содержит элемент NULL.

Объект cancellationToken отменен.

Применяется к

WaitAny(Task[])

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Ожидает завершения выполнения любого из указанных объектов Task.

public:
 static int WaitAny(... cli::array <System::Threading::Tasks::Task ^> ^ tasks);
public static int WaitAny (params System.Threading.Tasks.Task[] tasks);
static member WaitAny : System.Threading.Tasks.Task[] -> int
Public Shared Function WaitAny (ParamArray tasks As Task()) As Integer

Параметры

tasks
Task[]

Массив экземпляров Task, завершения выполнения которых следует дождаться.

Возвращаемое значение

Индекс завершенного объекта Task в массиве tasks.

Исключения

Объект Task удален.

Аргумент tasks имеет значение null.

Аргумент tasks содержит элемент NULL.

Примеры

В следующем примере запускается пять задач, каждая из которых переходит в спящий режим в течение не менее 50 миллисекунда или не более 1050 миллисекунда. Затем WaitAny метод ожидает завершения любой из задач. В примере отображается идентификатор задачи, которая завершила ожидание, а также текущее состояние всех задач.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task[] tasks = new Task[5];
      for (int ctr = 0; ctr <= 4; ctr++) {
         int factor = ctr;
         tasks[ctr] = Task.Run(() => Thread.Sleep(factor * 250 + 50));
      }
      int index = Task.WaitAny(tasks);
      Console.WriteLine("Wait ended because task #{0} completed.",
                        tasks[index].Id);
      Console.WriteLine("\nCurrent Status of Tasks:");
      foreach (var t in tasks)
         Console.WriteLine("   Task {0}: {1}", t.Id, t.Status);
   }
}
// The example displays output like the following:
//       Wait ended because task #1 completed.
//
//       Current Status of Tasks:
//          Task 1: RanToCompletion
//          Task 2: Running
//          Task 3: Running
//          Task 4: Running
//          Task 5: Running
open System.Threading
open System.Threading.Tasks

let tasks =
    [| for factor = 0 to 4 do
           Task.Run(fun () -> Thread.Sleep(factor * 250 + 50)) |]

let index = Task.WaitAny tasks
printfn $"Wait ended because task #{tasks[index].Id} completed."
printfn "\nCurrent Status of Tasks:"

for t in tasks do
    printfn $"   Task {t.Id}: {t.Status}"


// The example displays output like the following:
//       Wait ended because task #1 completed.
//
//       Current Status of Tasks:
//          Task 1: RanToCompletion
//          Task 2: Running
//          Task 3: Running
//          Task 4: Running
//          Task 5: Running
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks(4) As Task
      For ctr As Integer = 0 To 4
         Dim factor As Integer = ctr
         tasks(ctr) = Task.Run(Sub() Thread.Sleep(factor * 250 + 50))
      Next
      Dim index As Integer = Task.WaitAny(tasks)

      Console.WriteLine("Wait ended because task #{0} completed.",
                        tasks(index).Id)
      Console.WriteLine()
      Console.WriteLine("Current Status of Tasks:")
      For Each t In tasks
         Console.WriteLine("   Task {0}: {1}", t.Id, t.Status)
      Next
   End Sub
End Module
' The example displays output like the following:
'       Wait ended because task #1 completed.
'
'       Current Status of Tasks:
'          Task 1: RanToCompletion
'          Task 2: Running
'          Task 3: Running
'          Task 4: Running
'          Task 5: Running

Применяется к