gpt4 book ai didi

c# - 线程 IIS 不会启动 C#

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:31 25 4
gpt4 key购买 nike

在我进入这个问题之前,我想说的是,我已经阅读了 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 函数 block 。

问题:我知道线程正在返回并且我没有泄漏任何幽灵线程。为什么 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com