Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
 public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <TOutput> target)
 {
     source.ReleaseReservation(messageHeader, target);
 }
Esempio n. 4
0
 void ISourceBlock <TSplit> .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <TSplit> target)
 {
     orderCapturer.ReleaseReservation(messageHeader, target);
 }
Esempio n. 5
0
 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);
Esempio n. 7
0
 public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <TTarget> target) =>
 _output.ReleaseReservation(messageHeader, target);
Esempio n. 8
0
 public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock <T> target)
 {
     Source.ReleaseReservation(messageHeader, target);
     BlockInfo.PoolRequestCounters.IncrementReleaseReservation();
 }