如何填充数据集与数据表在每个循环异步MVC

本文关键字:循环 MVC 异步 数据表 何填充 填充 数据集 | 更新日期: 2023-09-27 18:14:17

我试图得到一个数据集填充了多个数据表异步,但它似乎采取相同的执行时间,因为它之前的异步调用。可以请有人给我一些建议通过查看代码片段我在这里做错了什么。

在下面的代码中,假设result参数有4个条目,它们负责执行存储过程4次并返回4个数据表。一个特定存储过程的最长执行时间大约是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;
        });
    }

如何填充数据集与数据表在每个循环异步MVC

代替

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

试题:

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