还有其他一些问题,像这个,但与我可以告诉的实际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,是否会得到任何文档?或者你的收藏是空的? –