Давайте рассмотрим это краткое демо:
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?