如何为每个循环异步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
});
我正在尝试以异步方式获取一个包含多个数据表的数据集,但它的执行时间似乎与异步调用之前的执行时间相同。请有人通过查看代码片段给我一些建议,我在这里做错了什么。
下面的代码只假设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
});