public void ReportWatsonEvents(UserContext userContext, IList <ClientLogEvent> watsonEvents, Datapoint contextHeader, Datapoint[] context) { Stopwatch stopwatch = Stopwatch.StartNew(); int num = 0; int num2 = 0; List <ClientWatsonDatapointHandler.ClientWatsonReportLogEvent> list = new List <ClientWatsonDatapointHandler.ClientWatsonReportLogEvent>(watsonEvents.Count); List <WatsonClientReport> list2 = new List <WatsonClientReport>(watsonEvents.Count); foreach (ClientLogEvent clientLogEvent in watsonEvents) { string ctqName; clientLogEvent.TryGetValue <string>("ctq", out ctqName); ClientWatsonReportData reportData; ProcessingResult errorResult = this.TryExtractClientWatsonData(clientLogEvent, out reportData); if (errorResult.Code != ResultCode.Success) { list.Add(new ClientWatsonDatapointHandler.ClientWatsonReportLogEvent(clientLogEvent.Time, userContext, ctqName, reportData.IsUnhandledException, errorResult)); num2++; } else { int hashCode = reportData.OriginalCallStack.GetHashCode(); bool flag = this.parameters.IsErrorOverReportQuota(hashCode); if (flag) { string[] watsonParameters; if (ClientWatsonDatapointHandler.cachedFlavor == null) { ClientWatsonDatapointHandler.CreateClientWatsonReportAndUpdateCache(reportData, out watsonParameters); } else { watsonParameters = WatsonClientReport.BuildWatsonParameters(ClientWatsonDatapointHandler.cachedFlavor, ClientWatsonDatapointHandler.cachedVersion, reportData.TraceComponent, reportData.FunctionName, reportData.ExceptionType, reportData.NormalizedCallStack, reportData.CallStackHash); } list.Add(new ClientWatsonDatapointHandler.ClientWatsonReportLogEvent(clientLogEvent.Time, userContext, ctqName, watsonParameters, reportData.IsUnhandledException, false)); num++; } else { string[] watsonParameters; WatsonClientReport item = ClientWatsonDatapointHandler.CreateClientWatsonReportAndUpdateCache(reportData, out watsonParameters); list2.Add(item); list.Add(new ClientWatsonDatapointHandler.ClientWatsonReportLogEvent(clientLogEvent.Time, userContext, ctqName, watsonParameters, reportData.IsUnhandledException, true)); } } } string extraData = ClientWatsonDatapointHandler.BuildExtraDataString(userContext, contextHeader, context, list); foreach (WatsonClientReport report in list2) { this.parameters.ReportAction(report, extraData); } this.logger.Set(LogDatapointMetadata.WatsonDatapointSkipped, num); this.logger.Set(LogDatapointMetadata.WatsonDatapointFailed, num2); this.logger.Set(LogDatapointMetadata.WatsonReportingElapsed, stopwatch.ElapsedMilliseconds); }