我从对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相当陌生,所以我想看看这是否会是一个适当的实现,或者如果我完全错过了一些东西。

我从对SQL数据进行多个异步调用中获得了什么吗?

你所做的并不是真正的异步。您只是将工作卸载到执行查询时被阻塞的不同线程。

并行执行多个查询可以使单个流更快地完成,但它并不比一个接一个地执行这些查询更有效。

为了实际减少所需的资源(即线程),操作本身需要异步(而不仅仅是用Task.Run卸载)。这需要您使用的客户机库的支持。