为什么没有抓到这个例外?

sri*_*bin 7 c# multithreading task-parallel-library

我正在尝试运行以下代码:

class Program
{
    static void Main(string[] args)
    {
        var task = Task.Factory.StartNew(() =>
            {
                throw new ApplicationException("message");
            });
        try
        {
            task.ContinueWith(t => Console.WriteLine("End"));
        }
        catch (AggregateException aex)
        {
            Console.Write(aex.InnerException.Message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我预计Exception会被捕获在以下位置:

        catch (AggregateException aex)
        {
            Console.Write(aex.InnerException.Message);
        }
Run Code Online (Sandbox Code Playgroud)

但这不会发生.为什么会这样?

Jon*_*eet 10

你刚刚打印出来task- 甚至还没有完成.

打印任务不会等待它完成,或尝试获取值.

如果您将代码更改为:

try
{
    task.Wait();
}
Run Code Online (Sandbox Code Playgroud)

... 然后我希望它能抓住异常.

(我之前使用过Task<T>.Result,但我注意到这是一个没有返回值的任务,所以它只是非泛型的Task.)