ToList를 사용한 비동기, 대기 및 작업

async-await asynchronous c# dapper

문제

나는 기다리고 비동기를 사용하는 법을 배우려고 시도하고있다.

참조 데이터 관리자가있는 서비스 계층이 있습니다. 내 인터페이스는 다음과 같습니다.

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 with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow