C# 任務超時未完成直接返回結果
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
Task. |
Wait(TimeSpan, CancellationToken) | 等待 Task 完成執行過程。 |
Wait() | 等待 Task 完成執行過程。 |
Wait(Int32) | 等待 Task 在指定的毫秒數內完成執行。 |
Wait(CancellationToken) | 等待 Task 完成執行過程。 如果在任務完成之前取消標記已取消,等待將終止。 |
Wait(TimeSpan) | 等待 Task 在指定的時間間隔內完成執行。 |
Wait(Int32, CancellationToken) | 等待 Task 完成執行過程。 如果在任務完成之前超時間隔結束或取消標記已取消,等待將終止。 |
millisecondsTimeout Int32
等待的毫秒數,或為 Infinite (-1),表示無限期等待。
如果在分配的時間內 true
完成執行,則為 Task;否則為 false
。
millisecondsTimeout
是一個非 -1 的負數,而 -1 表示無限期超時。
已取消任務。 InnerExceptions 集合包含 TaskCanceledException 對象。
- 或 -
執行任務期間引發了一個異常。 InnerExceptions 集合包含一個或多個異常的相關信息。
以下示例啟動一個任務,該任務生成 0 到 100 之間的 500 萬個隨機整數,并計算其平均值。 該示例使用 Wait(Int32) 方法等待應用程序在 150 毫秒內完成。 如果應用程序正常完成,則任務會顯示它生成的隨機數之和和平均值。 如果超時間隔已過,則本示例在終止前顯示一條消息
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Task t = Task.Run( () => {
Random rnd = new Random();
long sum = 0;
int n = 5000000;
for (int ctr = 1; ctr <= n; ctr++) {
int number = rnd.Next(0, 101);
sum += number;
}
Console.WriteLine("Total: {0:N0}", sum);
Console.WriteLine("Mean: {0:N2}", sum/n);
Console.WriteLine("N: {0:N0}", n);
} );
if (! t.Wait(150))
Console.WriteLine("The timeout interval elapsed.");
}
}
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
// Or it displays the following output:
// The timeout interval elapsed.
Wait(Int32) 是一種同步方法,它會導致調用線程等待當前任務實例完成,直到發生以下任一情況:
任務成功完成。
任務本身被取消或引發異常。 在這種情況下,你將處理異常 AggregateException 。 屬性 AggregateException.InnerExceptions 包含有關異常的詳細信息。
由 millisecondsTimeout
已用定義的間隔。 在這種情況下,當前線程繼續執行,方法返回 false
。
------------------------------------
https://learn.microsoft.com/zh-CN/dotnet/api/system.threading.tasks.task.wait?view=net-7.0