public void TryDequeueReferenceTest() { var queue = new ConcurrentQueue <object>(); var weakReference = AddObjectWeakReference(queue); DequeueIgnore(queue); ThreadEx.MemoryBarrier(); GC.Collect(); GC.WaitForPendingFinalizers(); ThreadEx.MemoryBarrier(); Assert.IsFalse(weakReference.IsAlive); }
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); }