web-dev-qa-db-ja.com

FindとFindAsyncの違い

一意のIDに従ってコレクションからドキュメントを取得する非常に単純なクエリを作成しています。いくつかのフラストレーションの後(私はmongoとasync/awaitプログラミングモデルが初めてです)、これを理解しました。

IMongoCollection<TModel> collection = // ...
FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
IAsyncCursor<TModel> task = await collection.FindAsync(x => x.Id.Equals(id), options);
List<TModel> list = await task.ToListAsync();
TModel result = list.FirstOrDefault();
return result;

うまくいきました!しかし、「Find」メソッドへの参照を見続け、これを解決しました。

IMongoCollection<TModel> collection = // ...
IFindFluent<TModel, TModel> findFluent = collection.Find(x => x.Id == id);
findFluent = findFluent.Limit(1);
TModel result = await findFluent.FirstOrDefaultAsync();
return result;

結局のところ、これもうまくいきます!

これらの結果を達成するには、2つの異なる方法があるという重要な理由があると確信しています。これらの方法論の違いは何ですか?なぜ一方を選択する必要があるのですか?

22
object88

違いは構文にあります。 FindFindAsyncの両方により、同じパフォーマンスでのみ非同期クエリを構築できます。

FindAsynccursor which 一度にすべてのドキュメントをロードしないを返し、DBカーソルからドキュメントを1つずつ取得するインターフェイスを提供します。クエリ結果が膨大な場合に役立ちます。

Findは、メソッドToListAsyncを介してより単純な構文を提供します。このメソッドは、内部でカーソルからドキュメントを取得し、すべてのドキュメントを一度に返すを提供します。

27
rnofenko