控制台应用程序 - 尝试catch块不适用于任务

时间:2014-02-21 06:36:04

标签: c# multithreading exception console-application

这可能是一个基本问题,但是当我尝试捕获Task(在控制台应用程序中)引发的异常时,即使我在try catch块中调用task.Wait(),应用也会因未处理的异常而中断(在投掷之前添加Thread.Sleep之类的东西没有帮助):

static void Main(string[] args)
{
    Task task = Task.Run(() => { throw null; });

    try
    {
        task.Wait();
    }
    catch (AggregateException ae)
    {
        if (ae.InnerException is NullReferenceException)
            Console.WriteLine("Null!");
        else
            Console.WriteLine("Exception!");
    }

    Console.ReadLine();
}

截图:

enter image description here

enter image description here

4 个答案:

答案 0 :(得分:3)

如果你在catch中放置一个断点并继续执行,你会看到异常将被捕获。

答案 1 :(得分:0)

此屏幕仅显示断点处发生的情况如果继续执行程序或进一步向下移动断点,您将看到异常是catch并按预期返回Null 从调试器的角度来看,最简单的解释是 - 我现在看到异常了么? ooo这里是catch语句让我们看看如何处理它

答案 2 :(得分:0)

如果您await执行任务,那么您将获得例外。否则它将发生在另一个线程中。

答案 3 :(得分:0)

取消选中此行Break when this exception type is user-unhandled,然后点击“继续”。

enter image description here