একটি কনসোল অ্যাপ্লিকেশন বিবেচনা করুন যা কিছু পরিষেবা পৃথক থ্রেডে শুরু করে। ব্যবহারকারীকে এটি বন্ধ করার জন্য 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
}
অথবা এটি, থ্রেড.স্লিপ (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
লুপ দূরে অপ্টিমাইজ করা হবে একটি অসীম লুপ সৃষ্টি করে।