我试图异步地获取一个充满多个数据表的数据集,但它似乎采用与异步调用之前相同的执行时间。可以请一些人给我一些建议,看看代码片段我在这里做错了什么。
在下面的代码中,假设结果参数有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;
});
}
答案 0 :(得分:0)
而不是
foreach (var item in result)
{
// your code
}
尝试:
Parallel.ForEach(result, item =>
{
// your code
});