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

标签 c# asynchronous async-await dapper

我正在尝试学习如何使用 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/

相关文章:

azure - 异步 HttpClient 调用不会自动在应用服务的 Azure 应用见解中显示为依赖项

c# - TPL 数据流和异步方法调用

c# - 如何强制表单焦点?

c# - 在没有等待的情况下调用异步方法 - 潜在的处置对象问题

php - ReactPHP 在循环内阻塞

ios - Swift 4 访问完成处理程序从类变量返回的值

c# - 使用 ContinueWith 或 Async-Await 时的不同行为

c# - 在 C# 中序列化类。嵌套XML

c# - "Smart"连接字符串的方法?

c# - 如何在 C# Winforms 应用程序上使用模拟以管理员权限运行?