f3e3aab35a
Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d
114 lines
5.2 KiB
C#
114 lines
5.2 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||
|
||
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||
//
|
||
// DataflowLinkOptions.cs
|
||
//
|
||
//
|
||
// DataflowLinkOptions type for configuring links between dataflow blocks
|
||
//
|
||
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||
|
||
using System;
|
||
using System.Diagnostics;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace System.Threading.Tasks.Dataflow
|
||
{
|
||
/// <summary>
|
||
/// Provides options used to configure a link between dataflow blocks.
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// <see cref="DataflowLinkOptions"/> is mutable and can be configured through its properties.
|
||
/// When specific configuration options are not set, the following defaults are used:
|
||
/// <list type="table">
|
||
/// <listheader>
|
||
/// <term>Options</term>
|
||
/// <description>Default</description>
|
||
/// </listheader>
|
||
/// <item>
|
||
/// <term>PropagateCompletion</term>
|
||
/// <description>False</description>
|
||
/// </item>
|
||
/// <item>
|
||
/// <term>MaxMessages</term>
|
||
/// <description>DataflowBlockOptions.Unbounded (-1)</description>
|
||
/// </item>
|
||
/// <item>
|
||
/// <term>Append</term>
|
||
/// <description>True</description>
|
||
/// </item>
|
||
/// </list>
|
||
/// Dataflow blocks capture the state of the options at linking. Subsequent changes to the provided
|
||
/// <see cref="DataflowLinkOptions"/> instance should not affect the behavior of a link.
|
||
/// </remarks>
|
||
[DebuggerDisplay("PropagateCompletion = {PropagateCompletion}, MaxMessages = {MaxMessages}, Append = {Append}")]
|
||
public class DataflowLinkOptions
|
||
{
|
||
/// <summary>
|
||
/// A constant used to specify an unlimited quantity for <see cref="DataflowLinkOptions"/> members
|
||
/// that provide an upper bound. This field is a constant tied to <see cref="DataflowLinkOptions.Unbounded"/>.
|
||
/// </summary>
|
||
internal const Int32 Unbounded = DataflowBlockOptions.Unbounded;
|
||
|
||
/// <summary>Whether the linked target will have completion and faulting notification propagated to it automatically.</summary>
|
||
private Boolean _propagateCompletion = false;
|
||
/// <summary>The maximum number of messages that may be consumed across the link.</summary>
|
||
private Int32 _maxNumberOfMessages = Unbounded;
|
||
/// <summary>Whether the link should be appended to the source’s list of links, or whether it should be prepended.</summary>
|
||
private Boolean _append = true;
|
||
|
||
/// <summary>A default instance of <see cref="DataflowLinkOptions"/>.</summary>
|
||
/// <remarks>
|
||
/// Do not change the values of this instance. It is shared by all of our blocks when no options are provided by the user.
|
||
/// </remarks>
|
||
internal static readonly DataflowLinkOptions Default = new DataflowLinkOptions();
|
||
|
||
/// <summary>A cached instance of <see cref="DataflowLinkOptions"/>.</summary>
|
||
/// <remarks>
|
||
/// Do not change the values of this instance. It is shared by all of our blocks that need to unlink after one message has been consumed.
|
||
/// </remarks>
|
||
internal static readonly DataflowLinkOptions UnlinkAfterOneAndPropagateCompletion = new DataflowLinkOptions() { MaxMessages = 1, PropagateCompletion = true };
|
||
|
||
/// <summary>Initializes the <see cref="DataflowLinkOptions"/>.</summary>
|
||
public DataflowLinkOptions()
|
||
{
|
||
}
|
||
|
||
/// <summary>Gets or sets whether the linked target will have completion and faulting notification propagated to it automatically.</summary>
|
||
public Boolean PropagateCompletion
|
||
{
|
||
get { return _propagateCompletion; }
|
||
set
|
||
{
|
||
Debug.Assert(this != Default && this != UnlinkAfterOneAndPropagateCompletion, "Default and UnlinkAfterOneAndPropagateCompletion instances are supposed to be immutable.");
|
||
_propagateCompletion = value;
|
||
}
|
||
}
|
||
|
||
/// <summary>Gets or sets the maximum number of messages that may be consumed across the link.</summary>
|
||
public Int32 MaxMessages
|
||
{
|
||
get { return _maxNumberOfMessages; }
|
||
set
|
||
{
|
||
Debug.Assert(this != Default && this != UnlinkAfterOneAndPropagateCompletion, "Default and UnlinkAfterOneAndPropagateCompletion instances are supposed to be immutable.");
|
||
if (value < 1 && value != Unbounded) throw new ArgumentOutOfRangeException("value");
|
||
_maxNumberOfMessages = value;
|
||
}
|
||
}
|
||
|
||
/// <summary>Gets or sets whether the link should be appended to the source’s list of links, or whether it should be prepended.</summary>
|
||
public Boolean Append
|
||
{
|
||
get { return _append; }
|
||
set
|
||
{
|
||
Debug.Assert(this != Default && this != UnlinkAfterOneAndPropagateCompletion, "Default and UnlinkAfterOneAndPropagateCompletion instances are supposed to be immutable.");
|
||
_append = value;
|
||
}
|
||
}
|
||
}
|
||
}
|