private void OfferMessageToLink(TargetLink link) { List <ResourceEvent <TResource> > msg; lock (_lock) { if (!_queue.TryPeek(out msg)) { return; // queue is empty } } var header = new DataflowMessageHeader(++_msgId); link.LastOfferedMessageReply = link.Target.OfferMessage(header, msg, this, true); if (link.LastOfferedMessageReply == DataflowMessageStatus.DecliningPermanently) { _targets.Remove(link); } }
public IDisposable LinkTo(ITargetBlock <List <ResourceEvent <TResource> > > target, DataflowLinkOptions linkOptions) { //todo: add support for max messages lock (_lock) { var link = new TargetLink { Target = target, LinkOptions = linkOptions, LastOfferedMessageReply = DataflowMessageStatus.NotAvailable }; if (linkOptions.Append) { _targets.Add(link); } else { _targets.Insert(0, link); } OfferMessageToLink(link); return(Disposable.Create(() => _targets.Remove(link))); } }