एक कंसोल एप्लिकेशन पर विचार करें जो कुछ अलग-अलग थ्रेड में कुछ सेवाएं शुरू करता है। इसे करने की आवश्यकता है कि उपयोगकर्ता को इसे बंद करने के लिए Ctrl + C दबाएं।.NET कंसोल ऐप कैसे चलाना है?
इनमें से कौन सा बेहतर तरीका है?
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
}
+1। इसके अलावा, चूंकि 'बूल' को 'अस्थिर' के रूप में घोषित नहीं किया गया है, इसलिए निश्चित संभावना है कि 'लूप' में '_quitFlag' को पढ़ा जाएगा, जबकि लूप को अनुकूलित किया जाएगा, जिससे अनंत लूप हो जाएगा। –