c# - IIS 线程无法启动 C#

标签 c# multithreading iis request threadpool

在讨论这个问题之前,我想说,我已经阅读了 IIS 7、7、7.5 的线程建模,因此我知道如何处理线程。

当请求到来时,我的应用程序启动一个线程。

我们可以将线程假设为 cron 作业。

  1. GET 请求进来,比方说/Handle
  2. 在/Handle 的范围内,我从该操作启动一个线程,THREAD A
  3. 我不会长时间轮询 GET 请求,因此它返回到 立即用户。因此处理 GET 的线程被返回到 POOL
  4. 然后我会等待线程 A 完成后再执行其他操作。
  5. 据我所知,没有线程正在运行。两个线程都是 处理 GET 和 THREAD A 已退出。

我连续多次提出相同的请求。我总是等待两个线程退出。 过了一会儿 `Thread.Start()1 函数就会阻塞。

问题: 我知道线程正在返回,并且我没有泄漏任何幽灵线程。 为什么 IIS 不允许我在 4-5 个请求后启动新线程。 ?

为用户应用程序创建应用程序线程的正确方法是什么。 如果我说 Thread t= new Thread() ,这是否会从处理 GETS 或 CLR 的池中分配一个线程? 我使用的是 IIS7。

我知道我退出每个线程,我在 THREAD A 上调用 JOIN ,它永远不会阻塞,此时我不担心可扩展性,因此我总是有一个用户按顺序访问服务器。

最佳答案

因此,回答您的问题“为用户应用程序创建应用程序线程的正确方法是什么?”(即 ASP.NET 应用程序) - 您有很多选择:

  • 在 ASP.NET 线程上运行,无需任何线程 - ASP.NET 仍将处理多个请求
  • 对长时间运行的操作使用异步调用(请参阅 async operations)
  • 使用CLR ThreadPool
  • 将消息发送到其他服务器(例如使用 WCF 服务),因此长时间运行的处理发生在 Web 服务器外部。

您提到阅读有关 ASP.NET 中的线程的内容,但在 "MSDN: Performing Asynchronous Work, or Tasks, in ASP.NET Applications" 中关于 ASP.NET 中的线程如何工作有一个相对简短的描述。帖子的最后,有一个问题: “Q4:我应该创建自己的线程(新线程)吗?” 该问题的答案是“A4)请不要(创建新线程)。或者将其放在不同的方式,不!!!(...)“。

并回答您的问题:“为什么 IIS 不允许我在 4-5 个请求后启动新线程”? 这确实是一个奇怪的行为,也许 IIS 知道你做错了;)

关于c# - IIS 线程无法启动 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13864662/

相关文章:

c++ - ISO禁止启动自己类方法的线程?

asp.net - 无法转换为[B];相同的上下文(默认);不同的临时文件

c# - 如何将数据从 C# 传递到 C++(仅指针,无编码)

c# - 静态函数并发 ASP.NET

c# - 在多线程环境中创建实例

iis - IIS中的MVC3结构

ASP.NET 页面重定向列表

c# - @Html.HiddenFor(x => x.Id) 不起作用,但 <input type ="hidden"value = @Model.Id> 有效。为什么?

c# - Unity DI 帐户 Controller 中的 IRepositories 为空

c# - 线程成本 - 线程增加速度时的最短执行时间