Dapper.NET에서 비동기 API를 사용하면 확장 메서드에서 전달하는 명령 시간 제한 값이 준수되지 않는다는 것을 알게되었습니다. 그런 다음 SqlCommand.CommandTimeout의 MSDN documentation이 나타 났으며 이것이 "지원되지 않는"것으로 보입니다.Dapper.NET 비동기 API를 사용할 때 CommandTimeout을 존중하는 방법
CommandTimeout 속성은 BeginExecuteReader와 같은 비동기 메서드 호출 중에 무시됩니다.
기본 클래스에서 다음 메소드를 사용하고 있습니다.
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 SE 50 초 복용 요청이 아직 평가 될 것이다을 할 수있다.
비동기 Dapper.NET API를 사용하여 시간 초과 간격으로 연결을 끊고 처리하는 방법에 대한 의견이 있으십니까?
사소한 무관 한 것 : Close/Dispose 필요 - 기존 코드는 이미'using'을 통해 이러한 작업을 수행합니다. –