C# ThreadPool を介して MongoDB にマルチスレッド挿入を実行する C# アプリケーションがあります。しかし、私は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));
}
}