Bazı hizmetleri ayrı bir iş parçacığında başlatan bir Konsol uygulamasını düşünün. Tek yapması gereken, kullanıcının kapatmak için Ctrl + C'ye basmasını beklemektir.
Bunu yapmanın daha iyi yolu aşağıdakilerden hangisidir?
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
}
Veya bu, Thread.Sleep (1) kullanarak:
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
olarakvolatile
, olarak bildirilmediğinden_quitFlag
,while
döngüdeki sonraki okumaların optimize edilerek sonsuz bir döngüye yol açabileceği kesin bir olasılık vardır .