[英]Async, await and Task with ToList
我試圖學習如何使用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();
嘗試使用
model.DeptPaymentTypes = _refDataService.GetAsync(Enums.ReferenceTypes.DeptPaymentTypes).Result
.Select(x => new SelectListItem {
Text = x.Description,
Value = x.Id.ToString() })
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.