private async Task BusyWait(IEventResult result) { var desiredState = result.Results .GroupBy(r => new { r.Topic, r.Partition }) .Select(g => new EventMetadata { Topic = g.Key.Topic, Partition = g.Key.Partition, Offset = g.Max(r => r.Offset), }) .ToList(); _logger.Debug($"Ensuring consumer consistency, need state {string.Join(", ", desiredState)}"); var tries = 0; // We need to wait for consumer to catch up while (desiredState.Any(s => s.Offset > GetState(s).Offset)) { if (tries >= 20) { throw new ConsumerOutOfSyncException($"Could not reach desired state: {string.Join(", ", desiredState)}!"); } _logger.Debug($"Consumer lagging, waiting {tries} tries so far.."); await Task.Delay(200); tries += 1; } }
public static bool IsTimeout(this IEventResult eventResult, out DateTime dueTime) { if (eventResult is TimeoutEventResult timoutEventResult) { dueTime = timoutEventResult.DueTime; return(true); } dueTime = default; return(false); }
public static bool IsTimeout(this IEventResult eventResult) { return(eventResult is TimeoutEventResult); }
public static bool IsAggregateResult(this IEventResult eventResult) { return(eventResult is IAggregateEventResult); }