我有一个 C# 应用程序,它通过 C# ThreadPool 执行多线程插入到 MongoDB。但是,我得到了一个TimeoutException: Timeout waiting for a MongoConnection
. 我正在使用 MongoServer.RequestStart 方法,它应该将连接释放回 MongoClient 连接池。
另外,线程池最少有 4 个线程,最多有 8 个,而 Mongo 连接池默认有 100 个连接,所以我不应该用完连接。
那么为什么我会收到这个错误?
这是传递到线程池的方法。_client
是一个 MongoClient 实例变量。
public void BatchInsert(string collectionName, BinaryPacketDocument[] documents, int batchSize) {
MongoServer server = _client.GetServer();
MongoDatabase database = server.GetDatabase(_databaseName);
using (server.RequestStart(database)) {
MongoCollection collection = database.GetCollection(collectionName);
collection.InsertBatch(documents);
StatisticsManager.GetCounter("logs").Add(batchSize);
}
}
这就是我将它传递到线程池的方式。
private void SendWorkToThreadPool(string collectionName, BinaryPacketDocument[] documents, int batchSize) {
if (documents.Length != 0) {
ThreadPool.QueueUserWorkItem(state => _inserter.BatchInsert(collectionName, documents, batchSize));
}
}