我有一个来自 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() 来异步运行我的所有服务。当方法是异步和等待的时,为什么会出现这种情况?
答案 0 :(得分:1)
事实证明,IBM DB2 提供程序并不完全支持异步操作,因此我需要使用 Task.Run。说得通。感谢@Charlieface 为我指明了正确的方向。