Рассмотрим приложение консоли, которое запускает некоторые службы в отдельном потоке. Все, что нужно сделать - это подождать, пока пользователь нажмет Ctrl + C, чтобы закрыть его.
Какое из следующего является лучшим способом сделать это?
static ManualResetEvent _quitEvent = new ManualResetEvent(false);
static void Main() {
    Console.CancelKeyPress += (sender, eArgs) => {
        _quitEvent.Set();
        eArgs.Cancel = true;
    };
    // kick off asynchronous stuff 
    _quitEvent.WaitOne();
    // cleanup/shutdown and quit
}
Или это, используя Thread.Sleep(1):
static bool _quitFlag = false;
static void Main() {
    Console.CancelKeyPress += delegate {
        _quitFlag = true;
    };
    // kick off asynchronous stuff 
    while (!_quitFlag) {
        Thread.Sleep(1);
    }
    // cleanup/shutdown and quit
}