6

次のコードを取得したとしましょう。

var tasks = BuildTaskList();
try
{
    Task.WaitAll(tasks.ToArray());
}
catch (AggregateException exception)
{

}

でどのタスクがどの例外をスローしたかを知るにはどうすればよいexception.InnerExceptionsですか?

4

4 に答える 4

9

のリストがまだあり、TasksそれぞれTaskExceptionプロパティがあります。それを使用して、どの例外がどの に属しているかを把握できますTask

ただし、可能であれば、ブロッキング待機を使用するTask.WhenAllか、実行するよりも良いでしょう。TaskFactory.ContinueWhenAll

于 2013-08-19T12:51:07.063 に答える
2
var throwers = tasks.Where(task => task.Exception != null);
于 2013-08-19T12:52:35.663 に答える
0
        var t1 = Task.Factory.StartNew(() => Console.WriteLine("Task 1"));
        var t2 = Task.Factory.StartNew(() => Console.WriteLine("Task 2"));
        var t3 = Task.Factory.StartNew(() => { throw new InvalidOperationException(); });
        var t4 = Task.Factory.StartNew(() => Console.WriteLine("Task 4"));

        Task.Factory.ContinueWhenAll(new[] { t1, t2, t3, t4 }, tasks =>
            {
                foreach (var t in tasks)
                {
                    if (t.Status == TaskStatus.Faulted)
                    {
                        // this will run for t3
                        Console.WriteLine("This task has been faulted.");
                    }
                }
            });
于 2013-08-19T12:57:40.957 に答える