Compartir a través de


ActionBlock<TInput> Clase

Definición

Proporciona un bloque de flujo de datos que invoca un delegado proporcionado de Action<T> para cada elemento de datos recibido.

generic <typename TInput>
public ref class ActionBlock sealed : System::Threading::Tasks::Dataflow::ITargetBlock<TInput>
public sealed class ActionBlock<TInput> : System.Threading.Tasks.Dataflow.ITargetBlock<TInput>
type ActionBlock<'Input> = class
    interface ITargetBlock<'Input>
    interface IDataflowBlock
type ActionBlock<'Input> = class
    interface IDataflowBlock
    interface ITargetBlock<'Input>
Public NotInheritable Class ActionBlock(Of TInput)
Implements ITargetBlock(Of TInput)

Parámetros de tipo

TInput

El tipo de datos en el que este ActionBlock<TInput> funciona.

Herencia
ActionBlock<TInput>
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra el uso de la ActionBlock<TInput> clase para realizar varios cálculos mediante bloques de flujo de datos y se devuelve el tiempo transcurrido necesario para realizar los cálculos. Este ejemplo de código forma parte de un ejemplo más grande proporcionado para el artículo How to: Specify the Degree of Parallelism in a Dataflow Block (Cómo: Especificar el grado de paralelismo en un bloque de flujo de datos ).

// Performs several computations by using dataflow and returns the elapsed
// time required to perform the computations.
static TimeSpan TimeDataflowComputations(int maxDegreeOfParallelism,
   int messageCount)
{
   // Create an ActionBlock<int> that performs some work.
   var workerBlock = new ActionBlock<int>(
      // Simulate work by suspending the current thread.
      millisecondsTimeout => Thread.Sleep(millisecondsTimeout),
      // Specify a maximum degree of parallelism.
      new ExecutionDataflowBlockOptions
      {
         MaxDegreeOfParallelism = maxDegreeOfParallelism
      });

   // Compute the time that it takes for several messages to
   // flow through the dataflow block.

   Stopwatch stopwatch = new Stopwatch();
   stopwatch.Start();

   for (int i = 0; i < messageCount; i++)
   {
      workerBlock.Post(1000);
   }
   workerBlock.Complete();

   // Wait for all messages to propagate through the network.
   workerBlock.Completion.Wait();

   // Stop the timer and return the elapsed number of milliseconds.
   stopwatch.Stop();
   return stopwatch.Elapsed;
}
' Demonstrates how to specify the maximum degree of parallelism 
' when using dataflow.
Friend Class Program
   ' Performs several computations by using dataflow and returns the elapsed
   ' time required to perform the computations.
   Private Shared Function TimeDataflowComputations(ByVal maxDegreeOfParallelism As Integer, ByVal messageCount As Integer) As TimeSpan
      ' Create an ActionBlock<int> that performs some work.
      Dim workerBlock = New ActionBlock(Of Integer)(Function(millisecondsTimeout) Pause(millisecondsTimeout), New ExecutionDataflowBlockOptions() With { .MaxDegreeOfParallelism = maxDegreeOfParallelism})
         ' Simulate work by suspending the current thread.
         ' Specify a maximum degree of parallelism.

      ' Compute the time that it takes for several messages to 
      ' flow through the dataflow block.

      Dim stopwatch As New Stopwatch()
      stopwatch.Start()

      For i As Integer = 0 To messageCount - 1
         workerBlock.Post(1000)
      Next i
      workerBlock.Complete()

      ' Wait for all messages to propagate through the network.
      workerBlock.Completion.Wait()

      ' Stop the timer and return the elapsed number of milliseconds.
      stopwatch.Stop()
      Return stopwatch.Elapsed
   End Function

   Private Shared Function Pause(ByVal obj As Object)
      Thread.Sleep(obj)
      Return Nothing
   End Function

Comentarios

Nota

La biblioteca de flujos de datos TPL (el espacio de nombres System.Threading.Tasks.Dataflow) no se distribuye con .NET. Para instalar el espacio de nombres System.Threading.Tasks.Dataflow en Visual Studio, abra el proyecto, seleccione Administrar paquetes NuGet en el menú Proyecto y busque en línea el paquete System.Threading.Tasks.Dataflow. Como alternativa, para realizar la instalación con la CLI de .Net Core, ejecute dotnet add package System.Threading.Tasks.Dataflow.

Constructores

ActionBlock<TInput>(Action<TInput>)

Inicializa una nueva instancia de la clase ActionBlock<TInput> con la acción especificada.

ActionBlock<TInput>(Action<TInput>, ExecutionDataflowBlockOptions)

Inicializa una nueva instancia de la clase ActionBlock<TInput> con la acción y opciones de configuración especificadas.

ActionBlock<TInput>(Func<TInput,Task>)

Inicializa una nueva instancia de la clase ActionBlock<TInput> con la acción especificada.

ActionBlock<TInput>(Func<TInput,Task>, ExecutionDataflowBlockOptions)

Inicializa una nueva instancia de la clase ActionBlock<TInput> con la acción y opciones de configuración especificadas.

Propiedades

Completion

Obtiene un objeto Task que representa la operación asincrónica y la finalización del bloque de flujo de datos.

InputCount

Obtiene el número de elementos de entrada en espera de ser procesados por este bloque.

Métodos

Complete()

Indica al bloque de flujo de datos que no debe aceptar o generar más mensajes ni usar más mensajes pospuestos.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
Post(TInput)

Publica un elemento en el bloque de flujo de datos de destino.

ToString()

Devuelve una cadena que representa el nombre con formato de esta instancia de IDataflowBlock.

Implementaciones de interfaz explícitas

IDataflowBlock.Fault(Exception)

Hace que el bloque de flujo de datos se completar con errores.

ITargetBlock<TInput>.OfferMessage(DataflowMessageHeader, TInput, ISourceBlock<TInput>, Boolean)

Proporciona un mensaje para el bloque de flujo de datos y le ofrece la posibilidad de utilizarlo o posponerlo.

Métodos de extensión

AsObserver<TInput>(ITargetBlock<TInput>)

Crea una abstracción de IObserver<T> sobre ITargetBlock<TInput>.

Post<TInput>(ITargetBlock<TInput>, TInput)

Publica un elemento a ITargetBlock<TInput>.

SendAsync<TInput>(ITargetBlock<TInput>, TInput)

De forma asincrónica proporciona un mensaje al bloque de mensajes de destino, teniendo en cuenta el aplazamiento.

SendAsync<TInput>(ITargetBlock<TInput>, TInput, CancellationToken)

De forma asincrónica proporciona un mensaje al bloque de mensajes de destino, teniendo en cuenta el aplazamiento.

Se aplica a