簡體   English   中英

Task.WaitAll在其中一項任務仍在運行時未引發AggregateException

[英]Task.WaitAll not throwing AggregateException while one of the task is still running

var moduleTimeOut = 3000;
var errorsThatOccurred = new List<string>();
List<string> names = new List<string>() { "Task1", "Task2", "Task3" };

var tasks = new List<Task<string>>();
names.ForEach( name => tasks.Add( Task<string>.Factory.StartNew((m) => MyTask(m.ToString()), name)));

try
{
    var allTasksCompletedInTime = Task.WaitAll(tasks.ToArray(), moduleTimeOut);

}
catch (AggregateException ex)
{
    foreach (var exception in ex)
    {
        errorsThatOccurred.Add(exception.ToString());
    }
}
private string MyTask(string name)
{
    if (name.Equals("Task1"))
        System.Threading.Thread.Sleep(5000);

    if (name.Equals("Task2"))
        throw new ArgumentException("Task2 has thrown an exception");

    return "MyTask has finished the execution. Task is " + name;
}

我在捕獲AggregateException時遇到一些問題。 這是我的不同情況。

  1. 所有任務均及時完成。 →工作正常。

  2. Task2引發錯誤,所有其他任務均及時完成。 →捕獲了AggregateException,可以看到Task2拋出的ArgumentException。

  3. Task1未及時完成,仍在運行。 Task2引發錯誤。 Task3完成。 →AggregateException沒有觸發。 我看到Task2狀態出現故障,並且Exception屬性中包含異常信息。

我不知道為什么它在方案#3中沒有引發AggregateException。 有什么幫助嗎?

這是預期的行為。 如果您在所有任務完成之前都已超時(運行完成,出錯或取消),它將不會引發異常:它將僅返回false。

僅在所有任務均在指定時間內完成的情況下,才會引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM