2017-07-05 23:24:38 +02:00
# System.Threading.Tasks.Dataflow
``` diff
+namespace System.Threading.Tasks.Dataflow {
+ public sealed class ActionBlock< TInput > : IDataflowBlock, IDebuggerDisplay, ITargetBlock< TInput > {
+ public ActionBlock(Action< TInput > action);
+ public ActionBlock(Action< TInput > action, ExecutionDataflowBlockOptions dataflowBlockOptions);
+ public ActionBlock(Func< TInput , Task > action);
+ public ActionBlock(Func< TInput , Task > action, ExecutionDataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public int InputCount { get; }
+ public void Complete();
+ [MethodImpl(AggressiveInlining)]public bool Post(TInput item);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< TInput > .OfferMessage(DataflowMessageHeader messageHeader, TInput messageValue, ISourceBlock< TInput > source, bool consumeToAccept);
+ public override string ToString();
+ }
+ public sealed class BatchBlock< T > : IDataflowBlock, IDebuggerDisplay, IPropagatorBlock< T , T [ ] > , IReceivableSourceBlock< T [ ] > , ISourceBlock< T [ ] > , ITargetBlock< T > {
+ public BatchBlock(int batchSize);
+ public BatchBlock(int batchSize, GroupingDataflowBlockOptions dataflowBlockOptions);
+ public int BatchSize { get; }
+ public Task Completion { get; }
+ public int OutputCount { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< T [ ] > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ T[] System.Threading.Tasks.Dataflow.ISourceBlock< T [ ] > .ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< T [ ] > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< T [ ] > .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< T [ ] > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< T [ ] > .ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< T [ ] > target);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< T > .OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock< T > source, bool consumeToAccept);
+ public override string ToString();
+ public void TriggerBatch();
+ public bool TryReceive(Predicate< T [ ] > filter, out T[] item);
+ public bool TryReceiveAll(out IList< T [ ] > items);
+ }
+ public sealed class BatchedJoinBlock< T1 , T2 > : IDataflowBlock, IDebuggerDisplay, IReceivableSourceBlock< Tuple < IList < T1 > , IList< T2 > >>, ISourceBlock< Tuple < IList < T1 > , IList< T2 > >> {
+ public BatchedJoinBlock(int batchSize);
+ public BatchedJoinBlock(int batchSize, GroupingDataflowBlockOptions dataflowBlockOptions);
+ public int BatchSize { get; }
+ public Task Completion { get; }
+ public int OutputCount { get; }
+ public ITargetBlock< T1 > Target1 { get; }
+ public ITargetBlock< T2 > Target2 { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< Tuple < IList < T1 > , IList< T2 > >> target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ Tuple< IList < T1 > , IList< T2 > > System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < System . Collections . Generic . IList < T1 > ,System.Collections.Generic.IList< T2 > >>.ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < IList < T1 > , IList< T2 > >> target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < System . Collections . Generic . IList < T1 > ,System.Collections.Generic.IList< T2 > >>.ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < IList < T1 > , IList< T2 > >> target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < System . Collections . Generic . IList < T1 > ,System.Collections.Generic.IList< T2 > >>.ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < IList < T1 > , IList< T2 > >> target);
+ public override string ToString();
+ public bool TryReceive(Predicate< Tuple < IList < T1 > , IList< T2 > >> filter, out Tuple< IList < T1 > , IList< T2 > > item);
+ public bool TryReceiveAll(out IList< Tuple < IList < T1 > , IList< T2 > >> items);
+ }
+ public sealed class BatchedJoinBlock< T1 , T2 , T3 > : IDataflowBlock, IDebuggerDisplay, IReceivableSourceBlock< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >>, ISourceBlock< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> {
+ public BatchedJoinBlock(int batchSize);
+ public BatchedJoinBlock(int batchSize, GroupingDataflowBlockOptions dataflowBlockOptions);
+ public int BatchSize { get; }
+ public Task Completion { get; }
+ public int OutputCount { get; }
+ public ITargetBlock< T1 > Target1 { get; }
+ public ITargetBlock< T2 > Target2 { get; }
+ public ITargetBlock< T3 > Target3 { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ Tuple< IList < T1 > , IList< T2 > , IList< T3 > > System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < System . Collections . Generic . IList < T1 > ,System.Collections.Generic.IList< T2 > ,System.Collections.Generic.IList< T3 > >>.ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < System . Collections . Generic . IList < T1 > ,System.Collections.Generic.IList< T2 > ,System.Collections.Generic.IList< T3 > >>.ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < System . Collections . Generic . IList < T1 > ,System.Collections.Generic.IList< T2 > ,System.Collections.Generic.IList< T3 > >>.ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> target);
+ public override string ToString();
+ public bool TryReceive(Predicate< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> filter, out Tuple< IList < T1 > , IList< T2 > , IList< T3 > > item);
+ public bool TryReceiveAll(out IList< Tuple < IList < T1 > , IList< T2 > , IList< T3 > >> items);
+ }
+ public sealed class BroadcastBlock< T > : IDataflowBlock, IDebuggerDisplay, IPropagatorBlock< T , T > , IReceivableSourceBlock< T > , ISourceBlock< T > , ITargetBlock< T > {
+ public BroadcastBlock(Func< T , T > cloningFunction);
+ public BroadcastBlock(Func< T , T > cloningFunction, DataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< T > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ bool System.Threading.Tasks.Dataflow.IReceivableSourceBlock< T > .TryReceiveAll(out IList< T > items);
+ T System.Threading.Tasks.Dataflow.ISourceBlock< T > .ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< T > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< T > .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< T > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< T > .ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< T > target);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< T > .OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock< T > source, bool consumeToAccept);
+ public override string ToString();
+ public bool TryReceive(Predicate< T > filter, out T item);
+ }
+ public sealed class BufferBlock< T > : IDataflowBlock, IDebuggerDisplay, IPropagatorBlock< T , T > , IReceivableSourceBlock< T > , ISourceBlock< T > , ITargetBlock< T > {
+ public BufferBlock();
+ public BufferBlock(DataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public int Count { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< T > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ T System.Threading.Tasks.Dataflow.ISourceBlock< T > .ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< T > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< T > .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< T > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< T > .ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< T > target);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< T > .OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock< T > source, bool consumeToAccept);
+ public override string ToString();
+ public bool TryReceive(Predicate< T > filter, out T item);
+ public bool TryReceiveAll(out IList< T > items);
+ }
+ public static class DataflowBlock {
+ public static IObservable< TOutput > AsObservable< TOutput > (this ISourceBlock< TOutput > source);
+ public static IObserver< TInput > AsObserver< TInput > (this ITargetBlock< TInput > target);
+ public static Task< int > Choose< T1 , T2 , T3 > (ISourceBlock< T1 > source1, Action< T1 > action1, ISourceBlock< T2 > source2, Action< T2 > action2, ISourceBlock< T3 > source3, Action< T3 > action3);
+ public static Task< int > Choose< T1 , T2 , T3 > (ISourceBlock< T1 > source1, Action< T1 > action1, ISourceBlock< T2 > source2, Action< T2 > action2, ISourceBlock< T3 > source3, Action< T3 > action3, DataflowBlockOptions dataflowBlockOptions);
+ public static Task< int > Choose< T1 , T2 > (ISourceBlock< T1 > source1, Action< T1 > action1, ISourceBlock< T2 > source2, Action< T2 > action2);
+ public static Task< int > Choose< T1 , T2 > (ISourceBlock< T1 > source1, Action< T1 > action1, ISourceBlock< T2 > source2, Action< T2 > action2, DataflowBlockOptions dataflowBlockOptions);
+ public static IPropagatorBlock< TInput , TOutput > Encapsulate< TInput , TOutput > (ITargetBlock< TInput > target, ISourceBlock< TOutput > source);
+ public static IDisposable LinkTo< TOutput > (this ISourceBlock< TOutput > source, ITargetBlock< TOutput > target);
+ public static IDisposable LinkTo< TOutput > (this ISourceBlock< TOutput > source, ITargetBlock< TOutput > target, Predicate< TOutput > predicate);
+ public static IDisposable LinkTo< TOutput > (this ISourceBlock< TOutput > source, ITargetBlock< TOutput > target, DataflowLinkOptions linkOptions, Predicate< TOutput > predicate);
+ public static ITargetBlock< TInput > NullTarget< TInput > ();
+ public static Task< bool > OutputAvailableAsync< TOutput > (this ISourceBlock< TOutput > source);
+ public static Task< bool > OutputAvailableAsync< TOutput > (this ISourceBlock< TOutput > source, CancellationToken cancellationToken);
+ public static bool Post< TInput > (this ITargetBlock< TInput > target, TInput item);
+ public static TOutput Receive< TOutput > (this ISourceBlock< TOutput > source);
+ public static TOutput Receive< TOutput > (this ISourceBlock< TOutput > source, CancellationToken cancellationToken);
+ public static TOutput Receive< TOutput > (this ISourceBlock< TOutput > source, TimeSpan timeout);
+ public static TOutput Receive< TOutput > (this ISourceBlock< TOutput > source, TimeSpan timeout, CancellationToken cancellationToken);
+ public static Task< TOutput > ReceiveAsync< TOutput > (this ISourceBlock< TOutput > source);
+ public static Task< TOutput > ReceiveAsync< TOutput > (this ISourceBlock< TOutput > source, CancellationToken cancellationToken);
+ public static Task< TOutput > ReceiveAsync< TOutput > (this ISourceBlock< TOutput > source, TimeSpan timeout);
+ public static Task< TOutput > ReceiveAsync< TOutput > (this ISourceBlock< TOutput > source, TimeSpan timeout, CancellationToken cancellationToken);
+ public static Task< bool > SendAsync< TInput > (this ITargetBlock< TInput > target, TInput item);
+ public static Task< bool > SendAsync< TInput > (this ITargetBlock< TInput > target, TInput item, CancellationToken cancellationToken);
+ public static bool TryReceive< TOutput > (this IReceivableSourceBlock< TOutput > source, out TOutput item);
+ }
+ public class DataflowBlockOptions {
+ public const int Unbounded = -1;
+ public DataflowBlockOptions();
+ public int BoundedCapacity { get; set; }
+ public CancellationToken CancellationToken { get; set; }
+ public bool EnsureOrdered { get; set; }
+ public int MaxMessagesPerTask { get; set; }
+ public string NameFormat { get; set; }
+ public TaskScheduler TaskScheduler { get; set; }
+ }
+ public class DataflowLinkOptions {
+ public DataflowLinkOptions();
+ public bool Append { get; set; }
+ public int MaxMessages { get; set; }
+ public bool PropagateCompletion { get; set; }
+ }
+ [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
+ public struct DataflowMessageHeader : IEquatable< DataflowMessageHeader > {
+ public DataflowMessageHeader(long id);
+ public long Id { get; }
+ public bool IsValid { get; }
+ public override bool Equals(object obj);
+ public bool Equals(DataflowMessageHeader other);
+ public override int GetHashCode();
+ public static bool operator ==(DataflowMessageHeader left, DataflowMessageHeader right);
+ public static bool operator !=(DataflowMessageHeader left, DataflowMessageHeader right);
+ }
+ public enum DataflowMessageStatus {
+ Accepted = 0,
+ Declined = 1,
+ DecliningPermanently = 4,
+ NotAvailable = 3,
+ Postponed = 2,
+ }
+ public class ExecutionDataflowBlockOptions : DataflowBlockOptions {
+ public ExecutionDataflowBlockOptions();
+ public int MaxDegreeOfParallelism { get; set; }
+ public bool SingleProducerConstrained { get; set; }
+ }
+ public class GroupingDataflowBlockOptions : DataflowBlockOptions {
+ public GroupingDataflowBlockOptions();
+ public bool Greedy { get; set; }
+ public long MaxNumberOfGroups { get; set; }
+ }
+ public interface IDataflowBlock {
+ Task Completion { get; }
+ void Complete();
+ void Fault(Exception exception);
+ }
+ public interface IPropagatorBlock< in TInput , out TOutput > : IDataflowBlock, ISourceBlock< TOutput > , ITargetBlock< TInput >
+ public interface IReceivableSourceBlock< TOutput > : IDataflowBlock, ISourceBlock< TOutput > {
+ bool TryReceive(Predicate< TOutput > filter, out TOutput item);
+ bool TryReceiveAll(out IList< TOutput > items);
+ }
+ public interface ISourceBlock< out TOutput > : IDataflowBlock {
+ TOutput ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target, out bool messageConsumed);
+ IDisposable LinkTo(ITargetBlock< TOutput > target, DataflowLinkOptions linkOptions);
+ void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target);
+ bool ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target);
+ }
+ public interface ITargetBlock< in TInput > : IDataflowBlock {
+ DataflowMessageStatus OfferMessage(DataflowMessageHeader messageHeader, TInput messageValue, ISourceBlock< TInput > source, bool consumeToAccept);
+ }
+ public sealed class JoinBlock< T1 , T2 > : IDataflowBlock, IDebuggerDisplay, IReceivableSourceBlock< Tuple < T1 , T2 > >, ISourceBlock< Tuple < T1 , T2 > > {
+ public JoinBlock();
+ public JoinBlock(GroupingDataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public int OutputCount { get; }
+ public ITargetBlock< T1 > Target1 { get; }
+ public ITargetBlock< T2 > Target2 { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< Tuple < T1 , T2 > > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ Tuple< T1 , T2 > System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < T1 , T2 > >.ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < T1 , T2 > > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < T1 , T2 > >.ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < T1 , T2 > > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < T1 , T2 > >.ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < T1 , T2 > > target);
+ public override string ToString();
+ public bool TryReceive(Predicate< Tuple < T1 , T2 > > filter, out Tuple< T1 , T2 > item);
+ public bool TryReceiveAll(out IList< Tuple < T1 , T2 > > items);
+ }
+ public sealed class JoinBlock< T1 , T2 , T3 > : IDataflowBlock, IDebuggerDisplay, IReceivableSourceBlock< Tuple < T1 , T2 , T3 > >, ISourceBlock< Tuple < T1 , T2 , T3 > > {
+ public JoinBlock();
+ public JoinBlock(GroupingDataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public int OutputCount { get; }
+ public ITargetBlock< T1 > Target1 { get; }
+ public ITargetBlock< T2 > Target2 { get; }
+ public ITargetBlock< T3 > Target3 { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< Tuple < T1 , T2 , T3 > > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ Tuple< T1 , T2 , T3 > System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < T1 , T2 , T3 > >.ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < T1 , T2 , T3 > > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < T1 , T2 , T3 > >.ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < T1 , T2 , T3 > > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< System.Tuple < T1 , T2 , T3 > >.ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< Tuple < T1 , T2 , T3 > > target);
+ public override string ToString();
+ public bool TryReceive(Predicate< Tuple < T1 , T2 , T3 > > filter, out Tuple< T1 , T2 , T3 > item);
+ public bool TryReceiveAll(out IList< Tuple < T1 , T2 , T3 > > items);
+ }
+ public sealed class TransformBlock< TInput , TOutput > : IDataflowBlock, IDebuggerDisplay, IPropagatorBlock< TInput , TOutput > , IReceivableSourceBlock< TOutput > , ISourceBlock< TOutput > , ITargetBlock< TInput > {
+ public TransformBlock(Func< TInput , Task < TOutput > > transform);
+ public TransformBlock(Func< TInput , Task < TOutput > > transform, ExecutionDataflowBlockOptions dataflowBlockOptions);
+ public TransformBlock(Func< TInput , TOutput > transform);
+ public TransformBlock(Func< TInput , TOutput > transform, ExecutionDataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public int InputCount { get; }
+ public int OutputCount { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< TOutput > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ TOutput System.Threading.Tasks.Dataflow.ISourceBlock< TOutput > .ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< TOutput > .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< TOutput > .ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< TInput > .OfferMessage(DataflowMessageHeader messageHeader, TInput messageValue, ISourceBlock< TInput > source, bool consumeToAccept);
+ public override string ToString();
+ public bool TryReceive(Predicate< TOutput > filter, out TOutput item);
+ public bool TryReceiveAll(out IList< TOutput > items);
+ }
+ public sealed class TransformManyBlock< TInput , TOutput > : IDataflowBlock, IDebuggerDisplay, IPropagatorBlock< TInput , TOutput > , IReceivableSourceBlock< TOutput > , ISourceBlock< TOutput > , ITargetBlock< TInput > {
+ public TransformManyBlock(Func< TInput , IEnumerable < TOutput > > transform);
+ public TransformManyBlock(Func< TInput , IEnumerable < TOutput > > transform, ExecutionDataflowBlockOptions dataflowBlockOptions);
+ public TransformManyBlock(Func< TInput , Task < IEnumerable < TOutput > >> transform);
+ public TransformManyBlock(Func< TInput , Task < IEnumerable < TOutput > >> transform, ExecutionDataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public int InputCount { get; }
+ public int OutputCount { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< TOutput > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ TOutput System.Threading.Tasks.Dataflow.ISourceBlock< TOutput > .ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< TOutput > .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< TOutput > .ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< TOutput > target);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< TInput > .OfferMessage(DataflowMessageHeader messageHeader, TInput messageValue, ISourceBlock< TInput > source, bool consumeToAccept);
+ public override string ToString();
+ public bool TryReceive(Predicate< TOutput > filter, out TOutput item);
+ public bool TryReceiveAll(out IList< TOutput > items);
+ }
+ public sealed class WriteOnceBlock< T > : IDataflowBlock, IDebuggerDisplay, IPropagatorBlock< T , T > , IReceivableSourceBlock< T > , ISourceBlock< T > , ITargetBlock< T > {
+ public WriteOnceBlock(Func< T , T > cloningFunction);
+ public WriteOnceBlock(Func< T , T > cloningFunction, DataflowBlockOptions dataflowBlockOptions);
+ public Task Completion { get; }
+ public void Complete();
+ public IDisposable LinkTo(ITargetBlock< T > target, DataflowLinkOptions linkOptions);
+ void System.Threading.Tasks.Dataflow.IDataflowBlock.Fault(Exception exception);
+ bool System.Threading.Tasks.Dataflow.IReceivableSourceBlock< T > .TryReceiveAll(out IList< T > items);
+ T System.Threading.Tasks.Dataflow.ISourceBlock< T > .ConsumeMessage(DataflowMessageHeader messageHeader, ITargetBlock< T > target, out bool messageConsumed);
+ void System.Threading.Tasks.Dataflow.ISourceBlock< T > .ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock< T > target);
+ bool System.Threading.Tasks.Dataflow.ISourceBlock< T > .ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock< T > target);
+ DataflowMessageStatus System.Threading.Tasks.Dataflow.ITargetBlock< T > .OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock< T > source, bool consumeToAccept);
+ public override string ToString();
+ public bool TryReceive(Predicate< T > filter, out T item);
+ }
+}
```