Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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
Asp.net IIS请求处理线程池是否与TPL线程池相同?_Asp.net_Iis_Async Await_Task Parallel Library - Fatal编程技术网

Asp.net IIS请求处理线程池是否与TPL线程池相同?

Asp.net IIS请求处理线程池是否与TPL线程池相同?,asp.net,iis,async-await,task-parallel-library,Asp.net,Iis,Async Await,Task Parallel Library,我知道任务并行库(TPL)利用线程池来运行任务。 我还读到IIS使用“线程池”来处理传入的Http请求。 我的问题是:这两个是指同一个线程池吗?? 假设我有这个控制器方法: [HttpGet] public async void GetAsyncTest() { await Task.Run(() => {//Do some heavy CPU work here}); } 任务是否会使用与请求线程相同的线程池中的线程进行处理?简短的回答是是 这就是为什么为CPU密集的操作启动任

我知道任务并行库(TPL)利用线程池来运行任务。
我还读到IIS使用“线程池”来处理传入的Http请求。
我的问题是:这两个是指同一个线程池吗??

假设我有这个控制器方法:

[HttpGet]
public async void GetAsyncTest()
{
    await Task.Run(() => {//Do some heavy CPU work here});
}

任务是否会使用与请求线程相同的线程池中的线程进行处理?

简短的回答是


这就是为什么为CPU密集的操作启动任务没有意义的原因:它将使用与其他传入请求相同的池中的线程,因此您的应用程序将无法像以前那样处理更多请求。这就超出了在web应用程序中使事情异步的目的:它是在执行外部IO繁重操作(db请求或对另一个服务的http请求)时,释放线程供其他请求使用。

推荐的方法是不要在应用程序中启动此类工作。使用专门的服务来完成长期运行的工作。听起来像是我误导了你。更多细节可以在中找到,他们进一步讨论了线程池,线程池应该是一个线程池。请求是使用线程池中的线程处理的
Task.Run
弊大于利,因为它会将一个线程池线程替换为另一个线程池线程,从而导致不必要的线程切换。感谢您的回答@Miklos。是否有任何microsoft文档支持此功能?如果是的话,你会分享这个链接吗?我找不到关于这个特定主题的官方msdn文章,只有类似的so和论坛帖子(双关语:),比如这个:或者这个: