Compartilhar via


ActionBlock<TInput> Classe

Definição

Fornece um bloco de fluxo de dados que invoca um delegado Action<T> fornecido para cada elemento de dados recebido.

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

O tipo de dados em que isso ActionBlock<TInput> opera.

Herança
ActionBlock<TInput>
Implementações

Exemplos

O exemplo a seguir mostra o uso da ActionBlock<TInput> classe para executar vários cálculos usando blocos de fluxo de dados e retorna o tempo decorrido necessário para executar os cálculos. Este exemplo de código faz parte de um exemplo maior fornecido para o artigo Como especificar o grau de paralelismo em um artigo do Bloco de Fluxo de Dados .

// 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

Comentários

Observação

A Biblioteca de Fluxo de Dados TPL (o namespace System.Threading.Tasks.Dataflow) não é distribuída com o .NET. Para instalar o namespace System.Threading.Tasks.Dataflow no Visual Studio, abra o projeto, escolha Gerenciar Pacotes NuGet no menu Projeto e pesquise online o pacote System.Threading.Tasks.Dataflow. Como alternativa, instale-o usando a CLI do .NET Core e execute dotnet add package System.Threading.Tasks.Dataflow.

Construtores

ActionBlock<TInput>(Action<TInput>)

Inicializa uma nova instância da classe ActionBlock<TInput> com a ação especificada.

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

Inicializa uma nova instância da classe ActionBlock<TInput> com as opções de ação e de configuração especificadas.

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

Inicializa uma nova instância da classe ActionBlock<TInput> com a ação especificada.

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

Inicializa uma nova instância da classe ActionBlock<TInput> com as opções de ação e de configuração especificadas.

Propriedades

Completion

Obtém um objeto Task que representa a operação assíncrona e a conclusão do bloco de fluxo de dados.

InputCount

Obtém o número de itens de entrada que aguardam o processamento por este bloco.

Métodos

Complete()

Sinaliza para o bloco de fluxo de dados que ele não deve aceitar nem produzir mais mensagens, e não deve consumir mais mensagens adiadas.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Post(TInput)

Publica um item para o bloco de fluxo de dados de destino.

ToString()

Retorna uma cadeia de caracteres que representa o nome formatado desta instância IDataflowBlock.

Implantações explícitas de interface

IDataflowBlock.Fault(Exception)

Faz com que o bloco de fluxo de dados seja concluído em um estado com falha.

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

Oferece uma mensagem para o bloco de fluxo de dados, que fornece a oportunidade de consumir ou adiar a mensagem.

Métodos de Extensão

AsObserver<TInput>(ITargetBlock<TInput>)

Cria uma nova abstração IObserver<T> em relação a ITargetBlock<TInput>.

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

Adiciona um item ao ITargetBlock<TInput>.

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

Oferece assincronamente uma mensagem para o bloco de mensagens de destino, permitindo adiamento.

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

Oferece assincronamente uma mensagem para o bloco de mensagens de destino, permitindo adiamento.

Aplica-se a