public async Task ExecuteAsync() { try { IQueryProvider queryProvider = _transactionController?.Transaction; if (queryProvider == null) { queryProvider = DataProvider; } using (var queryResult = await queryProvider.ExecuteReaderAsync(ComposeQuery())) { foreach (var query in _queries) { if (query.ProducesResultSet) { if (query.ResultSetProcessor != null) { await query.ResultSetProcessor.ProcessResultAsync(queryResult); } await queryResult.NextResultAsync(); } } } } catch { foreach (var query in _queries) { query.ResultSetProcessor?.HandleFailure(); } throw; } }