Rozważmy aplikację konsolową, która uruchamia niektóre usługi w osobnym wątku. Wystarczy, że użytkownik naciśnie Ctrl + C, aby go zamknąć.
Który kod z poniższych jest lepszym sposobem na to?
static ManualResetEvent _quitEvent = new ManualResetEvent(false);
static void Main() {
Console.CancelKeyPress += (sender, eArgs) => {
_quitEvent.Set();
eArgs.Cancel = true;
};
_quitEvent.WaitOne();
// czyszczenie / zamknięcie i wyjście
}
albo używając Thread.Sleep(1):
static bool _quitFlag = false;
static void Main() {
Console.CancelKeyPress += delegate {
_quitFlag = true;
};
while (!_quitFlag) {
Thread.Sleep(1);
}
1 odpowiedź
Zawsze zapobiegaj używaniu pętli while, szczególnie gdy wymuszasz na kodzie sprawdzanie zmiennych. Marnuje to zasoby procesora i spowalnia program.
Zdecydowanie powiedziałbym pierwszy sposób jest lepszy.
Pozdrawiam :)