public Task PublishAsync(Event @event) { return(Task.Run(() => { var policy = GetRetryPolicy(_retryCount, (ex, time) => { //Log the exception here when RabbitMQ channel could not publish message }); using (var channel = _rabbitMQConnection.GetChannel()) { channel.ExchangeDeclare(exchange: BROKER_NAME, type: ExchangeType.Direct); policy.Execute(() => BasicPublish(@event, channel)); } })); }