PendingPublish PublishAsync(string exchange, string routingKey, bool mandatory, bool immediate, IBasicProperties basicProperties, byte[] body) { var publishTag = _model.NextPublishSeqNo; _publishTagMax = Math.Max(_publishTagMax, publishTag); var pendingPublish = new PendingPublish(_connectionContext, exchange, publishTag); try { _published.AddOrUpdate(publishTag, key => pendingPublish, (key, existing) => { existing.PublishNotConfirmed(); return(pendingPublish); }); _model.BasicPublish(exchange, routingKey, mandatory, immediate, basicProperties, body); } catch { PendingPublish ignored; _published.TryRemove(publishTag, out ignored); throw; } return(pendingPublish); }
PendingPublish PublishAsync(string exchange, string routingKey, bool mandatory, IBasicProperties basicProperties, byte[] body) { var publishTag = _model.NextPublishSeqNo; _publishTagMax = Math.Max(_publishTagMax, publishTag); var pendingPublish = new PendingPublish(_connectionContext, exchange, publishTag); try { _published.AddOrUpdate(publishTag, key => pendingPublish, (key, existing) => { existing.PublishNotConfirmed($"Duplicate key: {key}"); return(pendingPublish); }); basicProperties.Headers["publishId"] = publishTag.ToString("F0"); _model.BasicPublish(exchange, routingKey, mandatory, basicProperties, body); } catch { _published.TryRemove(publishTag, out _); throw; } return(pendingPublish); }
async Task ModelContext.BasicPublishAsync(string exchange, string routingKey, bool mandatory, bool immediate, IBasicProperties basicProperties, byte[] body) { PendingPublish pendingPublish = await Task.Factory.StartNew(() => PublishAsync(exchange, routingKey, mandatory, immediate, basicProperties, body), _tokenSource.Token, TaskCreationOptions.HideScheduler, _taskScheduler); await pendingPublish.Task; }
PendingPublish PublishAsync(string exchange, string routingKey, bool mandatory, IBasicProperties basicProperties, byte[] body) { var publishTag = _model.NextPublishSeqNo; _publishTagMax = Math.Max(_publishTagMax, publishTag); var pendingPublish = new PendingPublish(_connectionContext, exchange, publishTag); try { _published.AddOrUpdate(publishTag, key => pendingPublish, (key, existing) => { existing.PublishNotConfirmed(); return pendingPublish; }); basicProperties.Headers["publishId"] = publishTag.ToString("F0"); _model.BasicPublish(exchange, routingKey, mandatory, basicProperties, body); } catch { PendingPublish ignored; _published.TryRemove(publishTag, out ignored); throw; } return pendingPublish; }