このような他の質問がありますが、実際のFindAsyncとは関係がありません。C#MongoDB FindAsyncはAwaitで返さない
私のClientsController
は、mongoドライバを使用してAzureのmongodbを照会するClientService.GetClients
を呼び出します。
私がclientCollection.FindAsync
と呼ぶポイントまで、デバッガを進んでいく。私がこれを踏むと、次の行は決してヒットせず、エラーも出されません。それは待たれた仕事が決して戻らないようです。
public async Task<List<Client>> GetClients(SearchRequestDTO searchRequest)
{
var response = new List<Client>();
var db = _databaseUtilityService.GetCoreDatabase();
var clientCollection = db.GetCollection<Client>(Properties.Settings.Default.ClientCollectionName);
var cursor = await clientCollection.FindAsync(new BsonDocument());
while (await cursor.MoveNextAsync())
{
response.Concat(cursor.Current.ToList());
}
return response;
}
デバッガがvar cursor = ...
行をステップ実行しない理由は何ですか?
編集 -
私の代わりにResult
得ることができます -
var cursor = clientCollection.FindAsync(new BsonDocument()).Result;
をしかし、私はそれは私が何をしたいですか分かりません。
public async Task<List<Client>> GetClients(SearchRequestDTO searchRequest)
{
var db = _databaseUtilityService.GetCoreDatabase();
var clientCollection = db.GetCollection<Client>(Properties.Settings.Default.ClientCollectionName);
var results = clientCollection.FindAsync(new BsonDocument()).Result;
return results.ToList();
}
次の行にブレークポイントを設定します。ほとんどの場合、スレッドスイッチが関与している場合、デバッガはタスク継続の追跡を失います。 –
そのように聞こえました。しかし、私が '続行するときに決して次の行にぶつかることはありません。 –
同期呼び出しで動作しますか? Find()を呼び出してMoveNextでCursorを反復処理すると、ドキュメントがありますか?あなたのコレクションは空ですか? –