我注意到在 Dapper.NET 中使用异步 API 时,我在扩展方法中传递的命令超时值不受尊重。然后我遇到了 SqlCommand.CommandTimeout 的MSDN 文档,这似乎是它不“支持”的东西。
在异步方法调用(例如 BeginExecuteReader)期间,CommandTimeout 属性将被忽略。
我在基类中使用以下方法。
public async Task<int> ExecuteAsync(string sql, object param = null,
CommandType commandType = CommandType.Text, int? commandTimeout = null, IDbTransaction transaction = null)
{
using (var connection = Connection)
{
Task<int> queryTask = connection.ExecuteAsync(sql, param, transaction, commandTimeout ?? CommandTimeoutDefault, commandType);
int result = await queryTask.ConfigureAwait(false);
connection.Close();
connection.Dispose();
return result;
}
}
public async Task<IEnumerable<TEntity>> QueryAsync(string sql, object param = null,
CommandType commandType = CommandType.Text, int? commandTimeout = null, IDbTransaction transaction = null)
{
using (var connection = Connection)
{
Task<IEnumerable<TEntity>> queryTask = connection.QueryAsync<TEntity>(sql, param, transaction, commandTimeout ?? CommandTimeoutDefault, commandType);
IEnumerable<TEntity> data = await queryTask.ConfigureAwait(false);
connection.Close();
connection.Dispose();
return data;
}
}
说CommandTimeoutDefault
是 30,我可以确定仍然会评估需要 50 秒的请求。
任何想法如何使用异步 Dapper.NET API 在超时间隔内断开连接和处理连接?