1

当我运行 Asp.net(cs 文件)页面时:

并创建Thread T = new Thread(...) 使用BeginInvoke()

线程是否从 Asp.net 保留的线程池中获取?

编辑

本质上,.NET 维护了一个可以处理页面请求的线程池。当接收到新请求时,ASP.NET 会抓取其中一个可用线程并使用它来处理整个页面。同一个线程实例化页面,运行您的事件处理代码,并返回呈现的 HTML。如果 ASP.NET 以很快的速度接收请求——比它可以提供的速度还快——未处理的请求将在队列中堆积。如果队列已满,ASP.NET 将被迫拒绝其他请求,并出现 503“服务器不可用”错误。

我不想影响 Asp.net “请求线程......”

在此处输入图像描述

4

1 回答 1

4

当你使用new Thread()时,它实际上创建了一个与ThreadPool.

当您使用Delegate.BeginInvoke()时,委托在 .Net 上执行ThreadPool(没有特殊的 ASP.NET 线程池)。

通常,最好将ThreadPool用于短期运行的任务并在需要运行长时间运行的任务时手动创建线程。另一种选择是使用 .Net 4.0 Task,它为您提供了更好、更一致的 API。CPU-bound Tasks 通常在 上运行ThreaPool,但您可以指定一个LongRunning选项,以便它们创建自己的线程。

ThreadPool一般来说,即使在 ASP.NET 应用程序中,您也可能不必担心. 如果你确实遇到了这些问题,你可以尝试增加 中的线程数ThreadPool,或者你可以使用一个单独的线程池(这需要一些代码,但你应该可以在互联网上找到它的代码)。如果使用Tasks,使用自定义线程池会更容易,因为这意味着只需切换TaskScheduler.

于 2012-05-08T08:38:56.457 回答