public static void TaskThreadIsBackgroundWhileWaiting() { var manualResetEvent = new ManualResetEvent[1]; using (manualResetEvent[0] = new ManualResetEvent(false)) { Thread thread = null; var task = TaskEx.Run ( () => { thread = Thread.CurrentThread; manualResetEvent[0].WaitOne(); } ); ThreadingHelper.SpinWaitWhileNull(ref thread); Assert.IsTrue((thread.ThreadState & ThreadState.Background) != 0); manualResetEvent[0].Set(); task.Wait(); } }
public static void TaskThreadIsBackgroundWhileLooping() { var signal = new[] { 0 }; Thread thread = null; TaskEx.Run ( () => { thread = Thread.CurrentThread; var spinWait = new SpinWait(); while (Volatile.Read(ref signal[0]) == 0) { spinWait.SpinOnce(); } } ); ThreadingHelper.SpinWaitWhileNull(ref thread); Assert.IsTrue((thread.ThreadState & ThreadState.Background) != 0); ThreadEx.MemoryBarrier(); Volatile.Write(ref signal[0], 1); }