簡體   English   中英

使用ToList進行異步,等待和任務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM