为什么一个线程(其中我设置IsBackgroundthread
到True
)没有与线程池线程一起运行?新的线程()和线程池?
/*1*/ volatile bool r = false;
/*2*/ var g= new Thread(() => r=Thread.CurrentThread.IsThreadPoolThread);
/*3*/ g.IsBackground = true;
/*4*/ g.Start();
/*5*/ g.Join();
/*6*/ Console.WriteLine(r); //false
尽管此代码(显然)确实在线程池线程上运行?
Task.Factory.StartNew(()=>Console.Write(Thread.CurrentThread.IsThreadPoolThread)); //true
Console.ReadLine();
p.s. (我知道任务是(默认情况下)在后台线程运行,并且它们在线程池中运行,但我的问题与我设置线程在后台运行的类似情况有关。)
“我知道任务总是后台线程”并不总是,如果你设置了一个TaskScheduler,那么Task任何地方都可以运行。 – svick
@svick确实。 (我的意思是默认)生病的改变。 –