gpt4 book ai didi

c# - 任务完成后,连接正在关闭

转载 作者:太空狗 更新时间:2023-10-29 21:08:07 24 4
gpt4 key购买 nike

我正在尝试使用 Task.WhenAll 执行多个 SqlDataReader。但是当等待任务时我得到了

"System.InvalidOperationException: Invalid operation. The connection is closed".

创建任务:

        List<Task<SqlDataReader>> _listTasksDataReader = new List<Task<SqlDataReader>>();
_listTasksDataReader.Add(GetSqlDataReader1(10));
_listTasksDataReader.Add(GetSqlDataReader2(10));
SqlDataReader[] _dataReaders = await Task.WhenAll(_listTasksDataReader);

我的“SqlDataReader”方法:

    public Task<SqlDataReader> GetSqlDataReader1(int recordCount)
{
using (var sqlCon = new SqlConnection(ConnectionString))
{
sqlCon.Open();
using (var command = new SqlCommand("sp_GetData", sqlCon))
{
command.Parameters.Clear();
command.Parameters.Add(new SqlParameter("@recordCount", recordCount));
command.CommandType = System.Data.CommandType.StoredProcedure;
return command.ExecuteReaderAsync();
}
}
}

当执行 Task.WhenAll 时,是否应该打开数据库连接,还是我遗漏了什么?

最佳答案

可以将 CommandBehavior.CloseConnection 传递给 ExecuteReaderAsync。然后连接将保持打开状态,直到返回的数据读取器对象关闭:参见 MSDN herehere .在这种情况下,SqlConnection 不需要位于 using 语句中。

像这样:

public Task<SqlDataReader> GetSqlDataReader1(int recordCount)
{
var sqlCon = new SqlConnection(ConnectionString);
sqlCon.Open();

using (var command = new SqlCommand("sp_GetData", sqlCon))
{
command.Parameters.Clear();
command.Parameters.Add(new SqlParameter("@recordCount", recordCount));
command.CommandType = System.Data.CommandType.StoredProcedure;
return command.ExecuteReaderAsync(CommandBehavior.CloseConnection);
}
}

关于c# - 任务完成后,连接正在关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com