为什么要添加Console.CancelKeyPress处理程序块,调试器在运行任务时退出CTRL + C退出

问题描述 投票:1回答:1

我设法将其简化为使用.Net Framework 4.6在VS2017中运行的最小测试用例:

    static void Main(string[] args)
    {
        Console.CancelKeyPress += (o, e) => End(); //some attempt to exit gracefully
        Task.Run(() => Task.Delay(100000)).Wait();
    }

    private static void End()
    {
        Console.WriteLine("EXITING...");
    }

如果在调试器中以Console.CancelKeyPress注释掉运行此命令,则CTRL + C会强制终止应用程序。使用编写的代码,即使我的事件处理程序没有采取任何措施来防止终止,它也会输出“ EXITING ...”,然后挂起。

如果我从命令行运行,则两个版本均按预期退出。

[花了我一些时间来找出未完成的Task,但是我不知道为什么事件处理程序正在改变行为。谁能找出原因?这是一些调试器怪癖吗?我在调试器中没有看到错误...

c# visual-studio visual-studio-debugging
1个回答
0
投票

这只是一个疯狂的猜测,但是您是否检查了将ConsoleCancelEventArgs实例e的Cancel属性设置为false会发生什么情况?

如果这能解决您的问题,那将很奇怪,不过,这可能有助于缩小问题的范围。

PS:由于我目前在Linux机器上,所以我自己无法对其进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.