如何为C#中MongoDB的Find操作设置超时时间
MongoDB.Driver 2.17.1超时配置详解
官方文档获取方式
直接查阅MongoDB官方针对.NET驱动的API参考文档,2.17.1版本的所有配置属性说明都能在其中找到,包括每个属性的作用、默认值和适用场景。
各类超时属性核心作用
MongoClientSettings 类属性
- ConnectTimeout:客户端与MongoDB服务器建立连接的超时时间,默认30秒
- MaxConnectionIdleTime:连接池内空闲连接的最大存活时长,默认30分钟
- MaxConnectionLifeTime:连接池中的连接从创建到销毁的最大生命周期,默认30分钟
- ServerSelectionTimeout:客户端选择可用MongoDB服务器的超时时间,默认30秒
- SocketTimeout:Socket读写操作的超时时间,默认无超时——这很可能是你遇到2小时冻结的关键原因,当网络异常或服务器无响应时,Socket会持续等待
FindOptions 类属性
- MaxTime:限制MongoDB服务器执行当前查询的最长时间,超时后服务器会终止查询,对应MongoDB原生的
maxTimeMS命令 - MaxAwaitTime:针对游标操作(比如等待更多数据返回的tailable游标)的最长等待时间,仅适用于特定游标场景
关于长时间冻结的说明
你调用Set<EntityDto>().Find(x => x.Id == id).FirstOrDefaultAsync(cancellationToken);出现的2小时冻结,主要是因为SocketTimeout默认无限制,若未传入有效CancellationToken或设置该超时,当服务器未响应时,请求会一直挂起。
内容的提问来源于stack exchange,提问作者vitm
相关产品推荐
相关产品推荐

