Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程IIS不会启动C#_C#_Multithreading_Iis_Request_Threadpool - Fatal编程技术网

线程IIS不会启动C#

线程IIS不会启动C#,c#,multithreading,iis,request,threadpool,C#,Multithreading,Iis,Request,Threadpool,在讨论这个问题之前,我想说,我已经阅读了IIS7、7、7.5的线程建模,所以我知道如何处理线程 我的应用程序在收到请求时启动一个线程 我们可以假设线程是cron作业 GET请求进入,让我们说/处理 在/Handle的范围内,我从该操作启动一个线程,即线程a 我没有长时间轮询GET请求,因此它返回到 马上使用。因此,处理GET的线程被返回到池中 然后,我等待线程A完成其他操作 据我所知,没有线程在运行。两条线都是 处理GET和线程A已退出 我连续几次提出同样的要求。我总是等待两个线程退出。 一段时

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

我的应用程序在收到请求时启动一个线程

我们可以假设线程是cron作业

  • GET请求进入,让我们说/处理
  • 在/Handle的范围内,我从该操作启动一个线程,即线程a
  • 我没有长时间轮询GET请求,因此它返回到 马上使用。因此,处理GET的线程被返回到池中
  • 然后,我等待线程A完成其他操作
  • 据我所知,没有线程在运行。两条线都是 处理GET和线程A已退出
  • 我连续几次提出同样的要求。我总是等待两个线程退出。 一段时间后,`Thread.Start()1函数块

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

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


    我知道我退出每个线程,我在线程a上调用一个连接,它从不阻塞,在这一点上我不担心可伸缩性,所以我总是让一个用户按顺序访问服务器

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

    • 在ASP.NET线程上运行,无任何线程-ASP.NET仍将处理多个请求
    • 对长时间运行的操作使用异步调用(请参阅)
    • 使用
    • 向其他服务器发送消息(例如,使用WCF服务),以便长时间运行的处理在Web服务器之外进行
    您提到了阅读有关ASP.NET中线程的内容,但在中,对ASP.NET中线程的工作原理有一个相对简短的描述。在文章的结尾,有一个问题: “Q4:我应该创建我自己的线程(新线程)吗?”这个问题的答案是“A4)请不要(创建新线程)。或者换一种说法,不!!!(…)”

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

    据我所知,使用
    new Thread()
    直接创建线程会创建一个直接线程,而不会触及
    ThreadPool
    ?你为什么要等待线程?你能展示一下你是如何创建线程的吗?您是否从线程池中获取线程?“4.然后我等待线程a”-如果处理请求的线程已返回到线程池,则哪个线程等待线程?好的,谢谢。我必须使用异步,我的ASP.NET线程必须立即返回给用户,这样我们就不会阻止用户。我也不能在单独的服务器上运行它,因为我使用Pinvoke。我创建的线程调用C语言中的东西,它会返回结果。谢谢,AppEngine中也有同样的概念。这是我第一次来到微软世界,所以我忘了说我正在使用MVC。因此,我需要使用异步控制器。我想我没有把我需要的东西说清楚。我不需要将任何内容返回给用户/客户端。我只想做一个背景线。AsyncTask/控制器是为长时间运行的线程实现的,用户最终需要在浏览器上看到某种结果。我所需要的就是能够运行后台线程?不要等到他们完成。