How to wait for a boolean without looping (using any kind of wait / semaphore / event / mutex, etc)

SpinWait.SpinUntil is the right answer, regardless where you're gonna place this code. SpinUntil offers "a nice mix of spinning, yielding, and sleeping in between invocations".


If you are using C# 4.0, you can use:

Task t = Task.Factory.StartNew (() => SomeCall(..));
t.Wait();

By using Task.Wait method.

If you have more than one task run one after another, you can use Task.ContinueWith:

 Task t = Task.Factory.StartNew (() =>SomeCall(..)).
                                ContinueWith(ExecuteAfterThisTaskFinishes(...);
 t.Wait();

declare as

 AutoResetEvent _ReadyToStop = new AutoResetEvent(false);

and use as

 _ReadyToStop.WaitOne();

and

 _ReadyToStop.Set();

For more info see the Synchronization Primitives in .Net