コード例 #1
0
        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();
            }
        }
コード例 #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);
        }