如何填充数据集与数据表在每个循环异步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;
});
}
代替
foreach (var item in result)
{
// your code
}
试题:
Parallel.ForEach(result, item =>
{
// your code
});