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); }