Web Api控制器和线程池

Ola*_*emo 8 c# asp.net iis multithreading asp.net-web-api

当IIS收到HTTP请求时,它会将请求移交给由一个或多个工作进程提供服务的应用程序池中的请求应用程序.工作进程将从共享线程池(如果需要)生成一个线程来为http请求提供服务.

(i)在web api控制器的上下文中,当收到此请求时,控制器是否被实例化并分配给生成的线程?

(ii)当对同一个api控制器有多个http请求时,每个生成的线程会有多少个控制器实例吗?

(iii)在类级别声明非线程安全的资源(dbContext)并在构造函数中实例化然后在类方法中使用的情况.提交和管理交易会有问题吗?

从本质上讲,每个线程的控制器实例是否一对一匹配?(我知道使用asp.net,多个线程实际上可以为单个http请求提供服务).

Win*_*Win 4

(i) 在 Web API 控制器的上下文中,当收到此请求时,控制器是否会实例化并分配给生成的线程?(ii) 当对同一个 api 控制器有多个 http 请求时,每个生成的线程会有同样多的控制器实例吗?

当收到请求时,ControllerFactory 或 DependencyResolver 会创建一个控制器实例。

基本上,主线程创建一个控制器实例,然后在多个线程之间共享同一实例,直到请求完成。

(iii) 在类级别声明非线程安全资源 (dbContext) 并在构造函数中实例化,然后在类方法中使用的情况。提交和管理交易会出现问题吗?

是的,共享成员或静态不是线程安全的。但是,操作方法内的局部变量是线程安全的。