public DataflowMessageStatus OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock <T> source, bool consumeToAccept) { // Either both tasks are set or both tasks are unset Contract.Assert(!(ReservingTask != null ^ ReleasingTask != null)); // Reserve the message only if there is no other reservation in place if (ReservingTask == null) { ReservingTask = Task.Run(() => { return(source.ReserveMessage(messageHeader, this)); }); ReleasingTask = new Task(() => { source.ReleaseReservation(messageHeader, this); }); } return(DataflowMessageStatus.Postponed); }
static void SourceBlockTestInternal <T>(ISourceBlock <T> block) { var target = new BufferBlock <T> (); bool consumed; // invalid header AssertEx.Throws <ArgumentException> ( () => block.ConsumeMessage(new DataflowMessageHeader(), target, out consumed)); // header that wasn't sent by the block doesn't throw block.ConsumeMessage(new DataflowMessageHeader(1), target, out consumed); AssertEx.Throws <ArgumentNullException> ( () => block.ConsumeMessage(new DataflowMessageHeader(1), null, out consumed)); AssertEx.Throws <ArgumentException> ( () => block.ReserveMessage(new DataflowMessageHeader(), target)); // header that wasn't sent by the block doesn't throw block.ReserveMessage(new DataflowMessageHeader(1), target); AssertEx.Throws <ArgumentNullException> ( () => block.ReserveMessage(new DataflowMessageHeader(1), null)); AssertEx.Throws <ArgumentException> ( () => block.ReleaseReservation(new DataflowMessageHeader(), target)); AssertEx.Throws <ArgumentNullException>(() => block.LinkTo(null, new DataflowLinkOptions())); AssertEx.Throws <ArgumentNullException>(() => block.LinkTo(target, null)); }
public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <TOutput> target) { source.ReleaseReservation(messageHeader, target); }
void ISourceBlock <TSplit> .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <TSplit> target) { orderCapturer.ReleaseReservation(messageHeader, target); }
public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <T> target) { actualSource.ReleaseReservation(messageHeader, predicateBlock); }
public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <ISegment <IGeofencingSample> > target) => _source.ReleaseReservation(messageHeader, target);
public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <TTarget> target) => _output.ReleaseReservation(messageHeader, target);
public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <T> target) { Source.ReleaseReservation(messageHeader, target); BlockInfo.PoolRequestCounters.IncrementReleaseReservation(); }