同时 25号线程正在反向做这个操作,由于大家都是双重 lock,所以最终导致 死锁 的发生。
三:有几个需要解答的问题 1. 为什么会有两个线程池?从线程栈对象看,应该也看到了有两个线程池 ExclusiveConnectionPool。
0:000> !dumpheap -type ExclusiveConnectionPool -stat Statistics: MT Count TotalSize Class Name 00007ffb1d25eca0 2 464 MongoDB.Driver.Core.ConnectionPools.ExclusiveConnectionPool这是由于朋友的 mongodb 连接串 用的是双IP的副本集模式。
{ "mongo": { "Connection": "mongodb://xxx.aliyuncs.com:3717,xxx.aliyuncs.com:3717/admin?replicaSet=mgset-500180544&readPreference=secondaryPreferred&maxPoolSize=1000&wtimeoutMS=10000" } } 2. 是程序员的锅吗?从堆栈信息看并不是程序员的锅,是 mongodb 在接收异步回调时,由于某种情况发生了 OperationCanceled 异常,面对异常的后续处理逻辑时出现了死锁bug。
3. 当前的 mognodb sdk版本是多少?这个mongodb 官方驱动是 2.13.1.0,也就是 2021-8-15 发布的,截至最新的是 10月份发布的 2.13.2.0。
4. 反馈了解这些信息后,和朋友做了沟通,朋友说他给 mongodb 社区提交 issue,几天后,官方给的回答是在最新的 v2.14.beta1 中做了处理。
https://github.com/mongodb/mongo-csharp-driver/commit/b961b81cb7dc1ffe7262c55a227afad0aab5a994
https://jira.mongodb.org/browse/CSHARP-3815
也就是说在未来的 release v2.14.0 版本中会得到解决,目前也只能等一等啦! 期待中。。。哈哈