nog*_*ood 0 c# using-statement winforms async-await mongodb-.net-driver
对于 C# 来说还是比较陌生。我的代码给了我想要的结果,但我不确定我是否以正确的方式实现了它。如果您想回答,请详细说明。我的目标是通过 搜索我的 MongoDB 中的条目FindAsync。这是我的代码:
public async Task<List<T>> SearchDocAsync<T, U>(string collection,
string findFieldName, U findValue)
{
var _collection = db.GetCollection<T>(collection);
var filter = Builders<T>.Filter.Eq(findFieldName, findValue);
var result = await (_collection.FindAsync(filter).Result.ToListAsync());
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是我在 WinForms 中的调用方式:
private async void BtnReadAll_Click(object sender, EventArgs e)
{
var asyncResults = await myMongoAux.SearchDocAsync<MyTModel, string>(
myCollectionName, "MyDBString", "TestString");
foreach (var r in asyncResults)
{
RtxbxResult.Text += $"{r.MyDBInt}\t{r.MyDBString}\n";
}
}
Run Code Online (Sandbox Code Playgroud)
这安全吗?我不应该使用 a using(但如何使用)?我读过一些关于你应该使用的内容:
配置等待(假)
如何以及为何?
非常友善,帮助我了解更多。感谢您的时间。:)
这看起来很奇怪
var result = await (_collection.FindAsync(filter).Result.ToListAsync());
Run Code Online (Sandbox Code Playgroud)
大概应该是
var result = await ((await _collection.FindAsync(filter)).ToListAsync());
Run Code Online (Sandbox Code Playgroud)
用于.Result任务将阻塞,直到任务完成。由于 UI 应用程序中线程的工作方式,这很有可能导致死锁。所以建议避免.Resultand,.Wait()除非你确信不会发生死锁。