0

我不会得到聚合异常没有被执行

namespace ExceptionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Task<int> t1 = new Task<int>(() => Add());
            try
            {
                t1.Start();
            }
            catch (AggregateException ag)
            {
                Console.WriteLine(ag.Message);
            }
            Console.ReadLine();
        }
        static int Add()
        {
            try
            {
                throw new ArgumentException("Exception");
            }
            catch(Exception e) { throw e; }

        }
    }
}
4

1 回答 1

2

Start()永远不会陷入这样的境地。它只启动Task, 并立即返回;它不会等到Task完成。

如果你想捕捉异常,你应该使用Wait()

Task<int> t1 = Task.Factory.StartNew(() => Add());
try
{
    t1.Wait();
}
catch (AggregateException ag)
{
    Console.WriteLine(ag.Message);
}

如果您使用Wait(),则可以使用Task.Factory.StartNew()(或Task.Run()在 .Net 4.5 上)而不是使用 .Net 的构造函数Start()。而且你也不再需要Console.ReadLine()了。(以上代码都反映了这两个变化。)

于 2012-08-19T14:55:25.750 回答