public static async Task <DbDataReader> ExecuteReaderAsync(
            this MySqlConnection conn,
            string spName,
            IEnumerable <MySqlParameter> parameters,
            MySqlTransaction transaction)
        {
            using (var cmd = new ProfiledDbConnection(conn).CreateCommand())
            {
                cmd.CommandText = spName;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = transaction;

                if (parameters != null)
                {
                    cmd.Parameters.AddRange(parameters.ToArray());
                }

                return(await cmd.ExecuteReaderAsync());
            }
        }