If You want to exit from loop if some bool set from another thread You may be victimed by compiler’s code optimalization.
class Test { private bool _loop = true; public static void Main() { Test test1 = new Test(); // Set _loop to false on another thread new Thread(() => { test1._loop = false;}).Start(); // Poll the _loop field until it is set to false while (test1._loop == true) ; // The loop above will never terminate! } }
Found here: http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/