private async Task Consume(IQueueConsumer <TModel> consumer, HorseMessage message, TModel model, HorseClient client) { if (Retry == null) { await consumer.Consume(message, model, client); return; } int count = Retry.Count == 0 ? 100 : Retry.Count; for (int i = 0; i < count; i++) { try { await consumer.Consume(message, model, client); return; } catch (Exception e) { Type type = e.GetType(); if (Retry.IgnoreExceptions != null && Retry.IgnoreExceptions.Length > 0) { if (Retry.IgnoreExceptions.Any(x => x.IsAssignableFrom(type))) { throw; } } if (Retry.DelayBetweenRetries > 0) { await Task.Delay(Retry.DelayBetweenRetries); } if (i == count - 1) { throw; } } } }
public void StartListening() { consumer.Consume(messageRecieved); }