【问题标题】:Different applications and Threadpool threads (or not)?不同的应用程序和线程池线程(或没有)?
【发布时间】:2014-08-13 13:29:42
【问题描述】:

我用这个简单的代码测试了不同的项目:(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

——是否用于Task

这实际上是我想到的最后一个地方 - asp.net 使用线程池线程执行任务。 (每个线程池线程对于服务其他请求很重要)

问题

为什么 Only asp.net 在创建/运行新任务时使用线程池线程? (另外,Tp线程是宝贵的资源)

【问题讨论】:

    标签: c# asp.net .net task threadpool


    【解决方案1】:

    它们都使用线程池线程,您没有等待足够长的时间让代码运行。在检查ab 的结果之前,您需要在线程版本上执行.Join() 并在任务版本上执行.Wait() 以等待代码完成。

    bool a, b;
    new Thread(() => { a = Thread.CurrentThread.IsThreadPoolThread; }).Start().Join();
    Task.Factory.StartNew(() => { b = Thread.CurrentThread.IsThreadPoolThread; }).Wait();
    

    【讨论】:

    • 你说得对,现在我觉得自己很蠢 :-)(至少我被纠正了)
    • (都产生相同的结果:-))
    • 很奇怪,但是如果我逐行跟踪它确实会更改正确的值-同时像我一样放置断点-不会显示更改....
    • BTW - new Thread 没有使用线程池线程。 i.imgur.com/KyIFBwi.jpgthis
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 2017-11-12
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多