线程IIS不会启动C#

时间:2012-12-13 16:55:25

标签: c# multithreading iis request threadpool

在我提出这个问题之前,我想说,我已经阅读了IIS 7,7,7的线程建模,所以我知道如何处理线程。

我的应用程序在请求进入时启动一个线程。

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

  1. GET请求进来,让我们说/ Handle
  2. 在/ Handle的范围内我从该动作开始一个线程,THREAD A
  3. 我不长时间轮询GET请求,所以它返回到 用户马上。因此,处理GET的线程将返回到POOL
  4. 然后我等到线程A完成其他任何事情。
  5. 因此,据我所知,没有线程正在运行。两个线程都是 处理GET和THREAD A已经退出。
  6. 我连续几次提出相同的请求。我总是等待两个线程退出。 过了一会儿`Thread.Start()1函数阻塞。

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

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

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

1 个答案:

答案 0 :(得分:2)

那么回答你的问题“为用户应用程序创建应用程序线程的正确方法是什么?”(即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知道你做错了;)