С# - отмена источника токена не работает, и основная функция зависает в консольном приложении ⇐ C#
С# - отмена источника токена не работает, и основная функция зависает в консольном приложении
Я написал следующий код C# в .NET 6 в простом консольном приложении. Он захватывает сигнал «Прерывание» (т. е. Ctrl+C) и сигнализирует источнику токена отмены об отмене своего токена. Затем в основном методе я хочу, чтобы поток завершился. Почему следующий код не работает должным образом, т. е. метод Main не завершается, и я не вижу сообщения Exiting...
пространство имен ConsoleApp1 { Программа общественного класса { частный статический CancellationTokenSource cancelTokenSource = новый CancellationTokenSource(); public static void Main(string[] args) { Console.CancelKeyPress += новый ConsoleCancelEventHandler(InterruptHandler); Task.Delay(Timeout.Infinite, cancelTokenSource.Token).Wait(); Console.WriteLine("Выход..."); } частный статический void InterruptHandler (объект? отправитель, ConsoleCancelEventArgs e) { ОтменаTokenSource.Cancel(); } } } Затем я изменил основной метод на этот, но все равно произошло то же самое.
public static void Main(string[] args) { Console.CancelKeyPress += новый ConsoleCancelEventHandler(InterruptHandler); в то время как (cancellationTokenSource.IsCancellationRequested == false) Thread.Sleep(1000); Console.WriteLine("Выход..."); } } }
Я написал следующий код C# в .NET 6 в простом консольном приложении. Он захватывает сигнал «Прерывание» (т. е. Ctrl+C) и сигнализирует источнику токена отмены об отмене своего токена. Затем в основном методе я хочу, чтобы поток завершился. Почему следующий код не работает должным образом, т. е. метод Main не завершается, и я не вижу сообщения Exiting...
пространство имен ConsoleApp1 { Программа общественного класса { частный статический CancellationTokenSource cancelTokenSource = новый CancellationTokenSource(); public static void Main(string[] args) { Console.CancelKeyPress += новый ConsoleCancelEventHandler(InterruptHandler); Task.Delay(Timeout.Infinite, cancelTokenSource.Token).Wait(); Console.WriteLine("Выход..."); } частный статический void InterruptHandler (объект? отправитель, ConsoleCancelEventArgs e) { ОтменаTokenSource.Cancel(); } } } Затем я изменил основной метод на этот, но все равно произошло то же самое.
public static void Main(string[] args) { Console.CancelKeyPress += новый ConsoleCancelEventHandler(InterruptHandler); в то время как (cancellationTokenSource.IsCancellationRequested == false) Thread.Sleep(1000); Console.WriteLine("Выход..."); } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отмена фона выполнения задачи, когда пользователь нажимает на кнопку «Отмена
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Отмена фона выполнения задачи, когда пользователь нажимает на кнопку «Отмена
Anonymous » » в форуме JAVA - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-