Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }