我从对SQL数据进行多个异步调用中获得了什么吗?
本文关键字:调用 异步 获得了 什么 SQL 数据 | 更新日期: 2023-09-27 18:09:11
设置如下:
public class Workflow
{
List<Detail> Details;
List<Notification> Notifications;
List<Machine> Machine;
public Workflow GetWorkflowInformation(int workflowID)
{
Task<Workflow> workflowTask = fillInWorkflowInfo(workflowID);
Task<List<Detail>> detailsTask = getDetails(workflowID);
Task<List<Notify>> notifyTask = getNotifications(workflowID);
Task<Machine> machineTask = getMachine();
Workflow workflow = workflowTask.Result;
workflow.Details = detailsTask.Result;
workflow.Notifications = notifyTask.Result;
workflow.Machine = machineTask.Result;
return workflow;
}
private async Task<List<Detail>> getDetails(int workflowID)
{
List<Detail> details = new List<Detail>();
await Task.Run( () = >
{
details = Detail.GetDetailsForWorkflow(workflowID);
}
}
private async Task<List<Notify>> getNotifications(int workflowID)
{
List<Notify> notifications = new List<Notify>();
await Task.Run( () = >
{
notifications = Notify.GetNotificationsForWorkflow(workflowID);
}
return notifications;
}
private async Task<Machine> getMachine(int workflowID)
{
Machine machine = new Machine();
await Task.Run( () = >
{
Machine.GetMachineForWorkflow(workflowID);
}
return machine;
}
private async Task<Workflow> fillInWorkflowInfo(int workflowID)
{
Workflow workflow = new Workflow();
await Task.Run( () = >
{
workflow = GetWorkflowInformation(workflowID);
}
return workflow;
}
}
上面的每个方法都对应一个SQL server调用。我想知道我是否通过做多个async/await调用获得任何东西(因为我的SQL Server可以一次处理多个调用),或者如果这只是因为偷听而减慢我的速度,或者如果我没有实现正确的东西。
我对async/await相当陌生,所以我想看看这是否会是一个适当的实现,或者如果我完全错过了一些东西。
你所做的并不是真正的异步。您只是将工作卸载到执行查询时被阻塞的不同线程。
并行执行多个查询可以使单个流更快地完成,但它并不比一个接一个地执行这些查询更有效。
为了实际减少所需的资源(即线程),操作本身需要异步(而不仅仅是用Task.Run
卸载)。这需要您使用的客户机库的支持。