C# 任務(wù)超時(shí)未完成直接返回結(jié)果
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
Task. |
Wait(TimeSpan, CancellationToken) | 等待 Task 完成執(zhí)行過(guò)程。 |
Wait() | 等待 Task 完成執(zhí)行過(guò)程。 |
Wait(Int32) | 等待 Task 在指定的毫秒數(shù)內(nèi)完成執(zhí)行。 |
Wait(CancellationToken) | 等待 Task 完成執(zhí)行過(guò)程。 如果在任務(wù)完成之前取消標(biāo)記已取消,等待將終止。 |
Wait(TimeSpan) | 等待 Task 在指定的時(shí)間間隔內(nèi)完成執(zhí)行。 |
Wait(Int32, CancellationToken) | 等待 Task 完成執(zhí)行過(guò)程。 如果在任務(wù)完成之前超時(shí)間隔結(jié)束或取消標(biāo)記已取消,等待將終止。 |
millisecondsTimeout Int32
等待的毫秒數(shù),或?yàn)?nbsp;Infinite (-1),表示無(wú)限期等待。
如果在分配的時(shí)間內(nèi) true
完成執(zhí)行,則為 Task;否則為 false
。
millisecondsTimeout
是一個(gè)非 -1 的負(fù)數(shù),而 -1 表示無(wú)限期超時(shí)。
已取消任務(wù)。 InnerExceptions 集合包含 TaskCanceledException 對(duì)象。
- 或 -
執(zhí)行任務(wù)期間引發(fā)了一個(gè)異常。 InnerExceptions 集合包含一個(gè)或多個(gè)異常的相關(guān)信息。
以下示例啟動(dòng)一個(gè)任務(wù),該任務(wù)生成 0 到 100 之間的 500 萬(wàn)個(gè)隨機(jī)整數(shù),并計(jì)算其平均值。 該示例使用 Wait(Int32) 方法等待應(yīng)用程序在 150 毫秒內(nèi)完成。 如果應(yīng)用程序正常完成,則任務(wù)會(huì)顯示它生成的隨機(jī)數(shù)之和和平均值。 如果超時(shí)間隔已過(guò),則本示例在終止前顯示一條消息
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) 是一種同步方法,它會(huì)導(dǎo)致調(diào)用線程等待當(dāng)前任務(wù)實(shí)例完成,直到發(fā)生以下任一情況:
任務(wù)成功完成。
任務(wù)本身被取消或引發(fā)異常。 在這種情況下,你將處理異常 AggregateException 。 屬性 AggregateException.InnerExceptions 包含有關(guān)異常的詳細(xì)信息。
由 millisecondsTimeout
已用定義的間隔。 在這種情況下,當(dāng)前線程繼續(xù)執(zhí)行,方法返回 false
。
------------------------------------
https://learn.microsoft.com/zh-CN/dotnet/api/system.threading.tasks.task.wait?view=net-7.0