private async Task <ReportResponse> GetResponse(AdWordsUser user, IReportDefinition reportDefinition)
        {
            var utils    = new ReportUtilities(user, reportDefinition);
            var response = default(ReportResponse);

            utils.OnReady  = new AdsReportUtilities.OnReadyCallback((r) => response = r);
            utils.OnFailed = new AdsReportUtilities.OnFailedCallback((ex) => throw ex);

            var task = Task.Run(async() =>
            {
                while (response == default(ReportResponse))
                {
                    await Task.Delay(300);
                }

                return(response);
            });

            utils.GetResponseAsync();

            return(await task);
        }