我用这个简单的代码测试了不同的项目:(2010,4.5.1)
bool a, b;
new Thread(() => { a = Thread.CurrentThread.IsThreadPoolThread; }).Start();
Task.Factory.StartNew(() => { b = Thread.CurrentThread.IsThreadPoolThread; });
我想看看哪些项目使用线程池线程,哪些不使用线程池线程:(作为默认(!)调用,没有 LongOperation 开关)
所以:
WPF
—不使用线程池线程。
控制台
—不使用线程池线程。
Winform
—不使用线程池线程。
ASP.net
— 是否用于任务
这实际上是我最后想到的地方 - asp.net 使用线程池线程来执行任务。 (每个线程池线程对于服务其他请求都很重要)
问题
为什么只有 asp.net 在创建/运行新任务时使用线程池线程? (此外,事实上 Tp 线程是宝贵的资源)
最佳答案
它们都使用线程池线程,您等待代码运行的时间不够长。您需要在线程版本上执行 .Join()
,并在任务版本上执行 .Wait()
,以等待代码完成,然后再检查结果a
和 b
。
bool a, b;
new Thread(() => { a = Thread.CurrentThread.IsThreadPoolThread; }).Start().Join();
Task.Factory.StartNew(() => { b = Thread.CurrentThread.IsThreadPoolThread; }).Wait();
关于c# - 不同的应用程序和线程池线程(或没有)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367093/