これは MongoDb C# Driver 2.2 を使用しています。
新しい C# ドライバーは非同期です。好むと好まざるとにかかわらず、対処する必要があります。将来的に重宝します。しかし、今のところ...
以下のコードでは、「result.GetAwaiter().GetResult();」というコードにより、非同期呼び出しが効果的に同期化されています。これにより、非同期コードが通常のフローで最後まで実行されます。
static void MongoGoNow()
{
IMongoCollection<ClassA> collection = db.GetCollection<ClassA>(Collection.MsgContentColName);
var result = TestFind(collection);
result.GetAwaiter().GetResult();
//What's next???
}
static async Task TestFind(IMongoCollection<ClassA> MyCollection)
{
var filter = new BsonDocument();
var count = 0;
using (var cursor = await MyCollection.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
// process document
count++;
}
}
}
次のように、Main メソッドの最後の 2 行のコードをマージすることもできます。
static void MongoGoNow()
{
IMongoCollection<ClassA> collection = db.GetCollection<ClassA>(Collection.MsgContentColName);
TestFind(collection).GetAwaiter().GetResult();
//What's next???
}