public override async Task ProcessBatchAsync(ICollection <EventContext> contexts) { var stacks = contexts.Where(c => c.Stack?.DateFixed != null && c.Stack.DateFixed.Value < c.Event.Date.UtcDateTime).GroupBy(c => c.Event.StackId); foreach (var stackGroup in stacks) { try { var context = stackGroup.First(); Logger.Trace().Message("Marking stack and events as regression.").Write(); await _stackRepository.MarkAsRegressedAsync(context.Stack.Id).AnyContext(); await _workItemQueue.EnqueueAsync(new StackWorkItem { OrganizationId = context.Event.OrganizationId, StackId = context.Stack.Id, UpdateIsFixed = true, IsFixed = false }).AnyContext(); await _stackRepository.InvalidateCacheAsync(context.Event.ProjectId, context.Event.StackId, context.SignatureHash).AnyContext(); bool isFirstEvent = true; foreach (var ctx in stackGroup) { ctx.Event.IsFixed = false; // Only mark the first event context as regressed. ctx.IsRegression = isFirstEvent; isFirstEvent = false; } } catch (Exception ex) { foreach (var context in stackGroup) { bool cont = false; try { cont = HandleError(ex, context); } catch {} if (!cont) { context.SetError(ex.Message, ex); } } } } }