Task.WaitAny Method

Definition

Waits for any of the provided Task objects to complete execution.

Overloads

WaitAny(Task[], TimeSpan)

Waits for any of the provided Task objects to complete execution within a specified time interval.

WaitAny(Task[], Int32, CancellationToken)

Waits for any of the provided Task objects to complete execution within a specified number of milliseconds or until a cancellation token is cancelled.

WaitAny(Task[], Int32)

Waits for any of the provided Task objects to complete execution within a specified number of milliseconds.

WaitAny(Task[], CancellationToken)

Waits for any of the provided Task objects to complete execution unless the wait is cancelled.

WaitAny(Task[])

Waits for any of the provided Task objects to complete execution.

WaitAny(Task[], TimeSpan)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Waits for any of the provided Task objects to complete execution within a specified time interval.

C#
public static int WaitAny(System.Threading.Tasks.Task[] tasks, TimeSpan timeout);

Parameters

tasks
Task[]

An array of Task instances on which to wait.

timeout
TimeSpan

A TimeSpan that represents the number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely.

Returns

The index of the completed task in the tasks array argument, or -1 if the timeout occurred.

Exceptions

The Task has been disposed.

The tasks argument is null.

The TotalMilliseconds property of the timeout argument is a negative number other than -1, which represents an infinite time-out.

-or-

The TotalMilliseconds property of the timeout argument is greater than Int32.MaxValue.

The tasks argument contains a null element.

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

WaitAny(Task[], Int32, CancellationToken)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Waits for any of the provided Task objects to complete execution within a specified number of milliseconds or until a cancellation token is cancelled.

C#
public static int WaitAny(System.Threading.Tasks.Task[] tasks, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);

Parameters

tasks
Task[]

An array of Task instances on which to wait.

millisecondsTimeout
Int32

The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

cancellationToken
CancellationToken

A CancellationToken to observe while waiting for a task to complete.

Returns

The index of the completed task in the tasks array argument, or -1 if the timeout occurred.

Exceptions

The Task has been disposed.

The tasks argument is null.

millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

The tasks argument contains a null element.

The cancellationToken was canceled.

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

WaitAny(Task[], Int32)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Waits for any of the provided Task objects to complete execution within a specified number of milliseconds.

C#
public static int WaitAny(System.Threading.Tasks.Task[] tasks, int millisecondsTimeout);

Parameters

tasks
Task[]

An array of Task instances on which to wait.

millisecondsTimeout
Int32

The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

Returns

The index of the completed task in the tasks array argument, or -1 if the timeout occurred.

Exceptions

The Task has been disposed.

The tasks argument is null.

millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

The tasks argument contains a null element.

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

WaitAny(Task[], CancellationToken)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Waits for any of the provided Task objects to complete execution unless the wait is cancelled.

C#
public static int WaitAny(System.Threading.Tasks.Task[] tasks, System.Threading.CancellationToken cancellationToken);

Parameters

tasks
Task[]

An array of Task instances on which to wait.

cancellationToken
CancellationToken

A CancellationToken to observe while waiting for a task to complete.

Returns

The index of the completed task in the tasks array argument.

Exceptions

The Task has been disposed.

The tasks argument is null.

The tasks argument contains a null element.

The cancellationToken was canceled.

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

WaitAny(Task[])

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Waits for any of the provided Task objects to complete execution.

C#
public static int WaitAny(params System.Threading.Tasks.Task[] tasks);

Parameters

tasks
Task[]

An array of Task instances on which to wait.

Returns

The index of the completed Task object in the tasks array.

Exceptions

The Task has been disposed.

The tasks argument is null.

The tasks argument contains a null element.

Examples

The following example launches five tasks, each of which sleeps for a minimum of 50 milliseconds or a maximum of 1,050 milliseconds. The WaitAny method then waits for any of the tasks to complete. The example displays the task ID of the task that ended the wait, as well as the current status of all the tasks.

C#
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

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0