Task.WaitAny 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
等待提供的任一 Task 对象完成执行过程。
重载
| WaitAny(Task[], TimeSpan) |
等待任何提供的 Task 对象在指定的时间间隔内完成执行。 |
| WaitAny(Task[], Int32, CancellationToken) |
等待提供的任何 Task 对象在指定的毫秒数内完成执行,或等到取消标记取消。 |
| WaitAny(Task[], Int32) |
等待任何提供的 Task 对象在指定的毫秒数内完成执行。 |
| WaitAny(Task[], CancellationToken) |
等待提供的任何 Task 对象完成执行过程(除非取消等待)。 |
| WaitAny(Task[]) |
等待提供的任一 Task 对象完成执行过程。 |
WaitAny(Task[], TimeSpan)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- 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 数组参数中的索引,如果发生超时,则为 -1。
例外
已释放了 Task。
tasks 参数为 null。
timeout 参数的 TotalMilliseconds 属性是一个非 -1 的负数,而 -1 表示无限期超时。
- 或 -
TotalMilliseconds参数的 timeout 属性大于 Int32.MaxValue。
tasks 参数包含一个 null 元素。
适用于
WaitAny(Task[], Int32, CancellationToken)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- 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
参数
- cancellationToken
- CancellationToken
等待任务完成期间要观察的 CancellationToken。
返回
已完成的任务在 tasks 数组参数中的索引,如果发生超时,则为 -1。
例外
已释放了 Task。
tasks 参数为 null。
millisecondsTimeout 是一个非 -1 的负数,而 -1 表示无限期超时。
tasks 参数包含一个 null 元素。
已取消 cancellationToken。
适用于
WaitAny(Task[], Int32)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- 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 数组参数中的索引,如果发生超时,则为 -1。
例外
已释放了 Task。
tasks 参数为 null。
millisecondsTimeout 是一个非 -1 的负数,而 -1 表示无限期超时。
tasks 参数包含一个 null 元素。
适用于
WaitAny(Task[], CancellationToken)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- 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
参数
- cancellationToken
- CancellationToken
等待任务完成期间要观察的 CancellationToken。
返回
已完成的任务在 tasks 数组参数中的索引。
例外
已释放了 Task。
tasks 参数为 null。
tasks 参数包含一个 null 元素。
已取消 cancellationToken。
适用于
WaitAny(Task[])
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- 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。
tasks 参数为 null。
tasks 参数包含一个 null 元素。
示例
以下示例启动五个任务,每个任务至少休眠 50 毫秒或最多 1,050 毫秒。 然后, 方法 WaitAny 将等待任何任务完成。 该示例显示结束等待的任务的任务 ID,以及所有任务的当前状态。
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