Обработчик CancelKeyPress путает оболочки (cmd.exe, powershell и bash) - PullRequest
0 голосов
/ 31 марта 2019

Давайте рассмотрим это краткое демо:

private static readonly CancellationTokenSource CancelSource = new CancellationTokenSource();

public static void Main()
{
    Console.WriteLine("Hello world!");
    Console.CancelKeyPress += (s, e) =>
    {
        e.Cancel = true;
        CancelSource.Cancel();
        Console.WriteLine("CancelKeyPress event handler finished");
    };
    CancelSource.Token.WaitHandle.WaitOne();
    Task.Delay(1000).Wait();
    Console.WriteLine("Main finished");
}

Как видите, Программа ожидает события отмены, заявляя, что она не хочет закрываться, ждет одну секунду, печатая "Main"готово "и выход.

Я ожидаю, что выход будет:

C:\Users\Benni\source\repos\Test\Test>dotnet run
Hello world!
CancelKeyPress event handler finished
^C
Main finished
C:\Users\Benni\source\repos\Test\Test>

Но это:

C:\Users\Benni\source\repos\Test\Test>dotnet run
Hello world!
CancelKeyPress event handler finished
^C
C:\Users\Benni\source\repos\Test\Test>Main finished

К сожалению, оболочки (я тестировал Bash, CMD.exe и powershell) распечатать CWD (для следующей команды) до того, как программа фактически закончит работать!Я что-то пропустил?Нужно ли использовать Console.TreatControlCAsInput, или это ошибка в coreclr?

1 Ответ

0 голосов
/ 05 июня 2019

Это действительно проблема DotNet Cli: https://github.com/dotnet/cli/issues/11050

...