如何为每个循环异步MVC用数据表填充数据集

How to fill Data Set with Data Tables in for each loop asynchronously MVC

我正在尝试以异步方式获取一个包含多个数据表的数据集,但它的执行时间似乎与异步调用之前的执行时间相同。请有人通过查看代码片段给我一些建议,我在这里做错了什么。

下面的代码只假设result参数有4项负责执行4次存储过程和return4张数据表。一个特定存储过程的最长执行时间约为 7 秒,因此我希望所有数据表的填充时间不超过 7 秒,否则如果没有异步调用,执行时间将达到 15 秒左右,这无论如何都是不可接受的。

    var ds = await FillDataSetAsync(asyncConnectionString, result);

    private Task<DataSet> FillDataSetAsync(string asyncConnectionString, List<Info> result)
    {
        var dataset = new DataSet();

        return Task<DataSet>.Factory.StartNew(() =>
        {
            foreach (var item in result)
            {
                DataTable dt = new DataTable("");

                using (SqlConnection conn = new SqlConnection(asyncConnectionString))
                {
                    var functionQuery = "Execute_StoredProcedure";                                               
                    SqlCommand comm = new SqlCommand(functionQuery, conn);

                    comm.Parameters.AddWithValue("Id", item.Id);

                    if (!string.IsNullOrWhiteSpace(item.Parameters))
                    {
                        comm.Parameters.AddWithValue("Parameters", item.OverrideParameters);
                    }

                    comm.CommandType = CommandType.StoredProcedure;

                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = comm;

                    da.Fill(dt);                                                                                                            dt.TableName = item.Id;                         
                    dataset.Tables.Add(dt);
                }
            }
            return dataset;
        });
    }

而不是

foreach (var item in result)
{
// your code
}

尝试:

Parallel.ForEach(result, item =>
{
// your code
});