【发布时间】:2021-06-12 07:12:07
【问题描述】:
我正在开发一个 blazor 服务器端项目。
我为我的查询编写了一个存储库模式类,但函数Task<List<Model>> GetAllModelsAsync() 遇到了一些问题。我希望它返回一个任务,这样我就可以在我的部分组件类中等待它的结果,以实现更灵敏的渲染。
我使用以下代码让它工作:
public Task<List<Model>> GetAllModelsAsync()
{
List<Model> modelList = new();
var sql = "SELECT * FROM model";
var query = DbConnection.QueryAsync<Model>(sql).Result;
var result = query.ToList();
foreach (var model in result) modelList.Add(GetModelAsync(int.Parse($"{model.Id}")).Result);
return Task.FromResult(modelList);
}
即使它正在运行,但感觉并不是最好的版本 因为我已经读过以下语法应该有效:
using (var connection = new SqlConnection(...))
{
var authors = connection.Query<Author>(
"Select * From Author").ToList();
}
我注意到以下语法也可以正常工作:
var query = (await DbConnection.QueryAsync<Model>(sql)).ToList();
虽然我现在必须将方法更改为异步。
我试图为它定义一个任务,但无法让它工作。
var sql = "SELECT * FROM model";
var task = new Task<List<Model>>(async () =>
{
(await DbConnection.QueryAsync<Model>(sql)).ToList();
});
return task
现在我得到return type of an 'async' anonymous function must be a 'void', 'Task', 'Task<T>', a task-like type, 'IAsyncEnumerable<T>', or 'lAsyncEnumerator<T>'
大多数错误状态的答案我必须返回某种类型的任务<..>但我确实返回了它。
我什至不确定这是否会破坏我的预期逻辑。 提前致谢!关于性能,我什至不确定我的第一个解决方案必须经常运行 GetSkill 是否有任何好处。
【问题讨论】:
标签: c# dapper blazor-server-side