.net - 在 .NET Core DI 中,单例生命周期服务如何处理并发请求?
问题描述
在 .NET Core DI 的上下文中,如果服务注册为 Singleton(生命周期,不要与模式混淆),它是否能够处理多个并发请求?
文档说“每个后续请求都使用相同的实例。” 假设我们的数据访问实现是这样注册的。这是否意味着它不会扩展和处理并发请求,并且每个请求基本上都会排队使用该服务?
解决方案
这是否意味着它不会扩展和处理并发请求,并且每个请求基本上都会排队使用该服务?
一点也不。当您将服务声明为Singleton
(或其他范围)时,您只需为DI定义其生命周期(创建和处置行为)。不多也不少。它对线程的访问方式和服务请求没有任何关系或影响。因此,您必须注意服务的并发问题,并在非线程安全的代码上到处定义锁。
假设我们的数据访问实现是这样注册的
特别是如果您使用像实体框架这样的 ORM,您应该知道它DbContext
不是线程安全的,并且将其声明为Singleton
会导致许多并发问题并且应该避免。
推荐阅读
- java - 如何在java中编写自定义比较器?
- python - 使用 Scapy 删除重复的 IP 地址
- python-3.x - 测试 mapper.py 产生的语法混乱
- python - 在 Python 中打印变量和字符串
- python - 这个 napari 和 pyQT5 安装和兼容性错误是什么意思?
- aws-elasticsearch - 具有开放访问权限的 AWS 弹性搜索服务
- android - Tergent/Rust 编译错误类型不匹配 u64 u32
- c++ - 如何适当地初始化指针以避免c ++中的分段错误?
- php - 为什么 Windows CryptVerifySignature 在 PHP 创建的签名上失败?
- java - Java通过删除重复项将两个列表与