Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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
C# 在IIS应用程序(asp.net)上使用任务/线程池_C#_Multithreading_Threadpool_Task - Fatal编程技术网

C# 在IIS应用程序(asp.net)上使用任务/线程池

C# 在IIS应用程序(asp.net)上使用任务/线程池,c#,multithreading,threadpool,task,C#,Multithreading,Threadpool,Task,我们在iis 7上有一个asp.net应用程序。我们需要创建一个异步进程来进行计算(使用web服务),而不是让客户端等待,我们使用ThreadPool来实现这一点(我更喜欢任务,但我是服务器端人员)。 我的问题是: 1.如果在iis上使用线程池,它会从客户端或操作系统的iis池中获取线程吗? 2.你会使用什么样的任务或线程池(我知道任务会给你更多信息,但UI人员喜欢这个池)。 ASP.NET主机为每个进程提供一个线程池。因此,如果您使用的是ThreadPool,那么它将从服务器请求的相同池中提取

我们在iis 7上有一个asp.net应用程序。我们需要创建一个异步进程来进行计算(使用web服务),而不是让客户端等待,我们使用ThreadPool来实现这一点(我更喜欢任务,但我是服务器端人员)。
我的问题是:
1.如果在iis上使用线程池,它会从客户端或操作系统的iis池中获取线程吗?
2.你会使用什么样的任务或线程池(我知道任务会给你更多信息,但UI人员喜欢这个池)。

ASP.NET主机为每个进程提供一个线程池。因此,如果您使用的是
ThreadPool
,那么它将从服务器请求的相同池中提取


也就是说,如果您正在启动独立于单个客户端请求的后台操作,那么您应该使用Win32服务、web服务、消息队列系统或类似的系统。在ASP.NET中运行“后台”线程不符合IIS的整个体系结构;如果您保持HTTP的无状态特性,则更容易正确扩展和执行其他it工作(例如,重新启动应用程序池)。

ASP.NET主机为每个进程提供一个线程池。因此,如果您使用的是
ThreadPool
,那么它将从服务器请求的相同池中提取


也就是说,如果您正在启动独立于单个客户端请求的后台操作,那么您应该使用Win32服务、web服务、消息队列系统或类似的系统。在ASP.NET中运行“后台”线程不符合IIS的整个体系结构;如果您保持HTTP的无状态性质,则更容易正确扩展和执行其他it工作(例如,重新启动应用程序池)。

任务仍然使用线程池中的线程

据我所知,您的问题是,第三方服务执行CPU密集型计算,您需要异步等待它完成

在这种情况下,如果您想推迟页面呈现,直到计算完成,这将有所帮助。 这种方法将在等待时将处理线程返回到线程池


您能否提供有关所需解决方案的更多详细信息以获得更准确的答案?

任务仍然使用线程池中的线程

据我所知,您的问题是,第三方服务执行CPU密集型计算,您需要异步等待它完成

在这种情况下,如果您想推迟页面呈现,直到计算完成,这将有所帮助。 这种方法将在等待时将处理线程返回到线程池


你能提供更多关于所需解决方案的细节吗?为了更精确的答案?

如果你担心完全加载你的服务器,我会考虑使用一个单独的服务器来处理异步请求,这样你就可以单独地对每种类型的使用进行缩放。(如果您希望卷总共需要几个以上的服务器,则适用)我们正在使用不同服务器上的计算,但是对服务器的调用和返回的答案仍然在同一个服务器上,如果您担心完全加载您的服务器,那么我将考虑使用单独的服务器来处理异步请求,以便可以分别对每个类型的使用进行缩放。(如果您希望您的卷总共需要几个以上的服务器,则适用)。我们在另一台服务器上使用计算,但对服务器的调用和返回的答案仍然在同一台服务器上,只是为了说明,因为我不太明白,您的建议是创建其他独立服务(与当前客户端请求分离的某些进程)并将其传输到它?是否可以在同一个应用程序上创建不同的stat线程并使用consumer-producer设计?关键是“不让客户端等待”的意思。如果您的意思是使用页面请求启动操作,并且页面请求在操作完成之前完成,那么是的,它应该是另一个服务(不由ASP.NET托管)。如果任务从IIS线程池中提取线程,这会阻止回收停止您的任务吗?例如,假设我要删除远程SAN上的文件,但我不希望客户端等待删除。我只想调用task.Run(IO.file.delete(..)。这不好吗?如果是这样,我的服务器有大量的RAM和内核。我不能在池中创建更多的线程吗?@Brain2000:不,这不会阻止循环。如果发生循环,您在线程池线程上所做的工作将被中止。我描述了其他方法。RAM/内核无关紧要;ASP.NET必须定期循环,因为他们处理连接中断的(IMO独特的)方式。我只是想澄清一下,因为我不太明白,你的建议是创建一些其他独立的服务(一些与当前客户端请求分离的流程)并将其传输到it?是否可以在同一个应用程序上创建不同的统计线程并使用消费者-生产者设计?关键是“不让客户等待”的意思。如果您的意思是使用页面请求启动操作,并且页面请求在操作完成之前完成,那么是的,它应该是另一个服务(不由ASP.NET托管)。如果任务从IIS线程池中提取线程,这会阻止回收停止您的任务吗?例如,假设我要删除远程SAN上的文件,但我不希望客户端等待删除。我只想调用task.Run(IO.file.delete(..)。这不好吗?如果是这样,我的服务器有大量的RAM和内核。我不能在池中创建更多的线程吗?@Brain2000:不,这不会阻止循环。如果发生循环,您在线程池线程上所做的工作将被中止。我描述了其他方法。RAM/内核无关紧要;ASP.NET必须定期循环,因为他们处理连接中断的方式。我们正在将一个文件从客户端上传到服务器并对其进行操作