還有其他一些問題,像這個,但與我可以告訴的實際FindAsync無關。C#MongoDB FindAsync永遠不會返回等待
我ClientsController
電話ClientService.GetClients
它採用蒙戈司機查詢在Azure上一個MongoDB的。
單步執行調試程序時,它會跳到我呼叫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,是否會得到任何文檔?或者你的收藏是空的? –