gpt4 book ai didi

c# - 使用 ToList 的异步、等待和任务

转载 作者:行者123 更新时间:2023-11-30 19:23:55 24 4
gpt4 key购买 nike

我正在尝试学习如何使用 await 和 async。

我有一个服务层,它有一个引用数据管理器。我的界面是:

public interface IReferenceDataService
{
Task<List<ReferenceItemDto>> GetAsync(ReferenceTypes type);
}

当我尝试在 UI 中获取数据时,我是这样做的:

    model.DeptPaymentTypes = _refDataService.GetAsync(Enums.ReferenceTypes.DeptPaymentTypes)
.Select(x => new SelectListItem {
Text = x.Description,
Value = x.Id.ToString() })
.ToList();

但是我得到一个错误,“ToList 不是 Task<... 的定义”

我的数据层调用使用 Dapper QueryAsync 获取数据...

 public async Task<List<ReferenceItemDto>> GetAsync(Enums.ReferenceTypes type)
{
var table = string.Empty;

if(type == Enums.ReferenceTypes.DaysOfMonth)
{
var days = new List<ReferenceItemDto>();
for (int i = 1; i <= 31; i++)
{
days.Add(new ReferenceItemDto
{
Description = i.ToString(),
Id = i
});
}
return days;
}


switch (type)
{
case Enums.ReferenceTypes.SnowballTypes:
table = "SnowballType";
break;
case Enums.ReferenceTypes.DeptPaymentTypes:
table = "DebtPaymentType";
break;
default:
throw new System.Exception("Unknown data type in referenc manager.");

}
using (IDbConnection db = new SqlConnection("Data Source=......"))
{
var data = await db.QueryAsync<ReferenceItemDto>("GetReferenceDataList", new { DataType = table }, commandType: CommandType.StoredProcedure);
return data.ToList();
}

}

我做错了什么? ToList 给我带来了问题。

最佳答案

您应该从异步方法中获得结果。最好避免像 Result 这样的阻塞调用,因此请改用 await

model.DeptPaymentTypes = (await _refDataService.GetAsync(Enums.ReferenceTypes.DeptPaymentTypes))
.Select(x => new SelectListItem {
Text = x.Description,
Value = x.Id.ToString() })
.ToList();

关于c# - 使用 ToList 的异步、等待和任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010006/

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