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)
- 來源:
- 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 陣列引數中已完成工作的索引;如果發生逾時,則為 -1。
例外狀況
Task 已經處置。
tasks 引數為 null。
timeout 的 TotalMilliseconds 屬性是不等於 -1 的負數,-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
參數
- 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 陣列引數中已完成工作的索引;如果發生逾時,則為 -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
參數
- 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 已經處置。
tasks 引數為 null。
tasks 引數包含 null 項目。
範例
下列範例會啟動五個工作,每個工作至少睡眠 50 毫秒,或最多 1,050 毫秒。 然後,方法 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