首页 > 解决方案 > 在 .NET Core DI 中,单例生命周期服务如何处理并发请求?

问题描述

在 .NET Core DI 的上下文中,如果服务注册为 Singleton(生命周期,不要与模式混淆),它是否能够处理多个并发请求?

文档说“每个后续请求都使用相同的实例。” 假设我们的数据访问实现是这样注册的。这是否意味着它不会扩展和处理并发请求,并且每个请求基本上都会排队使用该服务?

标签: .netperformance.net-coredependency-injectionsingleton

解决方案


这是否意味着它不会扩展和处理并发请求,并且每个请求基本上都会排队使用该服务?

一点也不。当您将服务声明为Singleton(或其他范围)时,您只需为DI定义其生命周期(创建和处置行为)。不多也不少。它对线程的访问方式和服务请求没有任何关系或影响。因此,您必须注意服务的并发问题,并在非线程安全的代码上到处定义锁。

假设我们的数据访问实现是这样注册的

特别是如果您使用像实体框架这样的 ORM,您应该知道它DbContext不是线程安全的,并且将其声明为Singleton会导致许多并发问题并且应该避免。


推荐阅读