Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ OfferMessage() [1/2]

DataflowMessageStatus ITargetBlock< T >. System.Threading.Tasks.Dataflow.BufferBlock< T >.OfferMessage ( DataflowMessageHeader messageHeader,
T messageValue,
ISourceBlock< T > source,
bool consumeToAccept )
inlineprivate

Definition at line 126 of file BufferBlock.cs.

127 {
128 if (!messageHeader.IsValid)
129 {
130 throw new ArgumentException(System.SR.Argument_InvalidMessageHeader, "messageHeader");
131 }
132 if (source == null && consumeToAccept)
133 {
135 }
137 {
139 {
141 return DataflowMessageStatus.DecliningPermanently;
142 }
143 if (_boundingState == null || (_boundingState.CountIsLessThanBound && _boundingState.PostponedMessages.Count == 0 && _boundingState.TaskForInputProcessing == null))
144 {
145 if (consumeToAccept)
146 {
147 messageValue = source.ConsumeMessage(messageHeader, this, out var messageConsumed);
148 if (!messageConsumed)
149 {
150 return DataflowMessageStatus.NotAvailable;
151 }
152 }
154 if (_boundingState != null)
155 {
156 _boundingState.CurrentCount++;
157 }
158 return DataflowMessageStatus.Accepted;
159 }
160 if (source != null)
161 {
162 _boundingState.PostponedMessages.Push(source, messageHeader);
163 return DataflowMessageStatus.Postponed;
164 }
165 return DataflowMessageStatus.Declined;
166 }
167 }
static string Argument_InvalidMessageHeader
Definition SR.cs:24
static string Argument_CantConsumeFromANullSource
Definition SR.cs:22
Definition SR.cs:7
readonly BoundingStateWithPostponedAndTask< T > _boundingState

References System.Threading.Tasks.Dataflow.BufferBlock< T >._boundingState, System.Threading.Tasks.Dataflow.BufferBlock< T >._source, System.Threading.Tasks.Dataflow.BufferBlock< T >._targetDecliningPermanently, System.Threading.Tasks.Dataflow.Internal.SourceCore< TOutput >.AddMessage(), System.SR.Argument_CantConsumeFromANullSource, System.SR.Argument_InvalidMessageHeader, System.Threading.Tasks.Dataflow.BufferBlock< T >.CompleteTargetIfPossible(), System.Threading.Tasks.Dataflow.BufferBlock< T >.IncomingLock, System.source, and System.Threading.Tasks.Dataflow.Internal.BoundingStateWithPostponedAndTask< TInput >.TaskForInputProcessing.