ASP.NET Core 管道多线程

Rem*_*Rem 5 c# dependency-injection asp.net-core

ASP.NET Core 管道是否通过多线程处理请求?如果是,您如何配置线程数?而且,单例服务是否应该是线程安全的?

Jam*_*ins 5

上面的评论中已经回答了第一个问题(查看KestrelServerOptions

关于线程安全,答案在文档中

单例生命周期服务在第一次被请求时创建(或者当 ConfigureServices 运行时,如果你在那里指定一个实例),然后每个后续请求都将使用相同的实例。如果您的应用程序需要单例行为,建议允许服务容器管理服务的生命周期,而不是实现单例设计模式并自己在类中管理对象的生命周期。

这意味着对服务的所有请求都拉同一个对象,这意味着没有每个线程的对象,因此没有线程安全。

线程安全

单例服务需要是线程安全的。如果单例服务依赖于瞬态服务,则瞬态服务可能还需要是线程安全的,具体取决于单例如何使用它。

再清楚不过了。由于对象不是按线程创建的,因此默认情况下它们不是线程安全的(尽管某些服务可能被设计为如此)。