gpt4 book ai didi

C# MongoDB FindAsync 永远不会返回 Await

转载 作者:可可西里 更新时间:2023-11-01 10:50:20 35 4
gpt4 key购买 nike

还有其他类似的问题,但据我所知与实际的 FindAsync 无关。

我的 ClientsController 调用 ClientService.GetClients,它使用 mongo 驱动程序查询 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;
}

调试器从不跨过 varcursor = ... 行的原因是什么?

编辑-

我可以得到结果-

var 光标 = 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();
}

最佳答案

由于没有太多关于上下文的信息,所以我想出了模拟类来满足问题。

请参阅下面的重载方法,当调用时,它将始终返回包含三个记录的列表。现在你的代码有什么问题吗?我相信它在你的 while 循环中。您正在调用导致问题的 response.Concat。我改为调用 response.AddRange 并且它有效。

public async Task<List<Client>> GetClients()
{
var mongoUri = "mongodb://localhost:27017";
var mongoClient = new MongoClient(mongoUri);

var mongoDatabase = mongoClient.GetDatabase("ClientDB");
var clientCollection = mongoDatabase.GetCollection<Client>("Clients");

// Empty collection to always get accurate result.
clientCollection.DeleteMany(new BsonDocument());

// Insert some dummy data
clientCollection.InsertOne(new Client() {Address = "One street, some state", ZipCode = 11111});
clientCollection.InsertOne(new Client() { Address = "2nd street, some state", ZipCode = 22222 });
clientCollection.InsertOne(new Client() { Address = "Third street, some state", ZipCode = 33333 });

var response = new List<Client>();
var cursor = await clientCollection.FindAsync(new BsonDocument());

while (await cursor.MoveNextAsync())
{
response.AddRange(cursor.Current);
}

return response;
}

关于C# MongoDB FindAsync 永远不会返回 Await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794435/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com