为什么我的程序在调试时循环异常?

时间:2017-04-17 14:56:45

标签: c# visual-studio

我正在玩TPL并拥有这个简单的程序

class Program
{
    static void Main(string[] args)
    {
        MainAsync().Wait();         
    }

    static async Task MainAsync()
    {
        try
        {
            var tcs = new TaskCompletionSource<string>();
            var canceled = tcs.TrySetCanceled();
            var myCanceledTask = tcs.Task;
            string result = "canceled";

            if (myCanceledTask.IsCanceled)
            {
                result = await myCanceledTask;
            }
            else
            {
                Console.WriteLine("Couldn't cancel task.");
            }

            Console.WriteLine("ID: \t" + myCanceledTask.Id);
            Console.WriteLine("Canceled: \t" + myCanceledTask.IsCanceled);
            Console.WriteLine("Completed: \t" + myCanceledTask.IsCompleted);
            Console.WriteLine("Faulted: \t" + myCanceledTask.IsFaulted);
            Console.WriteLine("Status: \t" + myCanceledTask.Status);
            Console.WriteLine("Result: \t" + result);
            Console.ReadLine();
        }
        catch (Exception e)
        {
            var msg = "CANCELED ERROR";
            throw new Exception(msg, e);
        }
    }
}

对我来说有趣的是,在调试时,这将通过以下行中的异常无限循环,按以下顺序排列:

result = await myCanceledTask,然后点击throw new Exception(msg, e),然后点击MainAsync().Wait(),最后暂停MainAsync().Wait()

此时我希望程序退出,但它似乎循环。我可以继续点击继续循环上面的各种休息。 Visual Studio永远不会退出调试模式

知道为什么Visual Studio会以这种方式运行吗?如果我在没有调试的情况下运行程序,我会得到一个异常并且可以按预期关闭程序。

0 个答案:

没有答案