별도의 스레드에서 일부 서비스를 시작하는 콘솔 애플리케이션을 고려하십시오. 사용자가 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
}
bool
또한는로 선언되지 않았기 때문에 루프 에서volatile
후속 읽기 가 최적화되어 무한 루프로 이어질 가능성 이 있습니다._quitFlag
while