是否可以使用异步BeginExecuteReader迭代多个数据集
本文关键字:数据集 迭代 BeginExecuteReader 可以使 异步 是否 | 更新日期: 2023-09-27 18:22:33
我有一个长时间运行的存储过程,它返回多个结果。
我想异步迭代结果,并在结果准备好时获取结果(因为它们可用)。
ExecuteReaderAsync
和一些WaitOne
逻辑?(从未使用过这个,所以任何例子都值得赞赏)
这可能吗?
private IEnumerable<DataTable> validationResultSets(string MOName, DateTime StartDate, DateTime EndDate, string FilePath)
{
DataTable d;
using (SqlConnection conn =
new SqlConnection(connString))
{
conn.Open();
using (cmd = new SqlCommand("dbo.sp_ValidateAcceptanceFile", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter
{
ParameterName = "@MOName",
Value = MOName,
SqlDbType = SqlDbType.VarChar,
Size = 255
});
cmd.Parameters.Add(new SqlParameter
{
ParameterName = "@StartDate",
Value = StartDate,
SqlDbType = SqlDbType.DateTime
});
cmd.Parameters.Add(new SqlParameter
{
ParameterName = "@EndDate",
Value = EndDate,
SqlDbType = SqlDbType.DateTime
});
cmd.Parameters.Add(new SqlParameter
{
ParameterName = "@FilePath",
Value = FilePath,
SqlDbType = SqlDbType.VarChar,
Size = 500
});
//IDataReader rdr = cmd.ExecuteReader();
IDataReader rdr = cmd.BeginExecuteReader(); //??
try
{
do
{
d = new DataTable();
d.Load(rdr);
yield return d;
} while (!rdr.IsClosed);
}
finally
{
rdr.Close();
rdr.Dispose();
}
}
}
}
您正在混合概念。返回多个结果的过程与MARS没有任何关系。返回多个结果的过程可以异步调用,请注意,一旦结果的第一个片段从服务器返回,异步调用就会完成,从那时起,您可以像同步代码中一样读取结果。