命令超时不抛出
The command timeout does not throw
private void NpgSqlGetContracts(IList<Contract> con)
{
var conn = (NpgsqlConnection)Database.GetDbConnection();
List<Contract> contracts = new List<Contract>();
using (var cmd = new NpgsqlCommand("SELECT * FROM \"Contracts\";", conn))
{
cmd.CommandTimeout = 1;
cmd.Prepare();
int conCount= cmd.ExecuteNonQuery();
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleResult))
{
while (reader.Read())
{
contracts.Add(MapDataReaderRowToContract(reader));
}
}
}
}
这里我有这段代码可以在 postgres 中尝试命令超时,我已经尝试在 visual studio 中使用断点在本地调试它。我尝试了 ExecuteNonQuery 和 ExecuteReader 查询花费了 超过 1 秒 来加载所有数据(我这里有超过 300 万行)。但是 命令超时设置为 1 秒。我想知道为什么这里没有抛出任何异常,我这里配置错了什么?
谢谢:)
正如@hans-kesting 上面所写,命令超时不是整个命令的累积,而是每个单独的 I/O-producing 调用(例如 Read
)。从这个意义上说,它旨在帮助解决查询 运行 时间过长(没有产生任何结果)或网络问题。
你可能还想看看 PostgreSQL 的 statement_timeout
,它是整个命令的 PG 端超时。它也有它的问题,Npgsql 永远不会为您隐式设置它 - 但您可以自己设置它。
private void NpgSqlGetContracts(IList<Contract> con)
{
var conn = (NpgsqlConnection)Database.GetDbConnection();
List<Contract> contracts = new List<Contract>();
using (var cmd = new NpgsqlCommand("SELECT * FROM \"Contracts\";", conn))
{
cmd.CommandTimeout = 1;
cmd.Prepare();
int conCount= cmd.ExecuteNonQuery();
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleResult))
{
while (reader.Read())
{
contracts.Add(MapDataReaderRowToContract(reader));
}
}
}
}
这里我有这段代码可以在 postgres 中尝试命令超时,我已经尝试在 visual studio 中使用断点在本地调试它。我尝试了 ExecuteNonQuery 和 ExecuteReader 查询花费了 超过 1 秒 来加载所有数据(我这里有超过 300 万行)。但是 命令超时设置为 1 秒。我想知道为什么这里没有抛出任何异常,我这里配置错了什么?
谢谢:)
正如@hans-kesting 上面所写,命令超时不是整个命令的累积,而是每个单独的 I/O-producing 调用(例如 Read
)。从这个意义上说,它旨在帮助解决查询 运行 时间过长(没有产生任何结果)或网络问题。
你可能还想看看 PostgreSQL 的 statement_timeout
,它是整个命令的 PG 端超时。它也有它的问题,Npgsql 永远不会为您隐式设置它 - 但您可以自己设置它。