为什么这里需要 Task.Run?

时间:2021-06-10 15:31:32

标签: c# .net async-await

我有一个来自 Web 应用程序的 API 调用,该应用程序使用 Dapper 查询一些结果并将它们返回给用户。但是,为什么这会异步工作

IEnumerable<Task<Policy>> getPolicyTasks = from policy in policyList select GetPolicyDetailAsync(policy);

IEnumerable<Task<Policy>> tasks = policyList.Select(policy => Task.Run(() => GetPolicyDetailAsync(policy)));

var policyResults = await Task<Policy>.WhenAll(tasks);

但这不是吗?

List<Task<Policy>> getPolicyTasks = new List<Task<Policy>>();

foreach (var policy in policyList)
      getPolicyTasks.Add(GetPolicyDetailAsync(policy));

var policyResults = await Task.WhenAll(getPolicyTasks);

policies = policyResults.ToList();

GetPolicyAsync 是一个简单的 Dapper SQL 调用,如下所示:

policies = await db.QueryAsync<Policy, Address, Policy>(sql,
   (policy, address) =>
   {
       policy.Address = address;
       return policy;
   },
   param: new { input = policy },
   splitOn: "Address1");

return policy;

API 调用似乎需要使用 Task.Run() 来异步运行我的所有服务。当方法是异步和等待的时,为什么会出现这种情况?

1 个答案:

答案 0 :(得分:1)

事实证明,IBM DB2 提供程序并不完全支持异步操作,因此我需要使用 Task.Run。说得通。感谢@Charlieface 为我指明了正确的方向。

相关问题