public virtual async Task <List <T> > ExecuteReaderAsync <T>(CommandType cmdType, string cmdText, Func <IDataReader, T> transform, params OracleParameter[] commandParameters) { var myList = new List <T>(); using (var connection = new OracleConnection(ConnectionString)) { await connection.OpenAsync(); using (var command = new OracleCommand(cmdText, connection)) { command.CommandType = cmdType; if (commandParameters != null) { command.Parameters.AddRange(commandParameters); } // Since none of the rows are likely to be large, we will execute this without specifying a CommandBehavior // This will cause the default (non-sequential) access mode to be used using (var reader = await command.ExecuteReaderAsync()) { //if (await reader.ReadAsync()) //{ while (await reader.ReadAsync()) { myList.Add(transform(reader)); } //} } } } return(myList); }