ActionBlock<TInput> Classe

Definizione

Fornisce un blocco di flussi di dati che richiama un delegato fornito Action<T> per ogni elemento dati ricevuto.

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
Public NotInheritable Class ActionBlock(Of TInput)
Implements ITargetBlock(Of TInput)

Parametri di tipo

TInput

Tipo di dati su cui opera.ActionBlock<TInput>

Ereditarietà
ActionBlock<TInput>
Implementazioni

Esempio

Nell'esempio seguente viene illustrato l'uso della ActionBlock<TInput> classe per eseguire diversi calcoli usando blocchi di flussi di dati e restituisce il tempo trascorso necessario per eseguire i calcoli. Questo esempio di codice fa parte di un esempio più ampio fornito per l'articolo Procedura: Specificare il grado di parallelismo in un blocco di flussi di dati .

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

Commenti

Annotazioni

La libreria del flusso di dati TPL (spazio dei nomi System.Threading.Tasks.Dataflow) non viene distribuita con .NET. Per installare lo spazio dei nomi System.Threading.Tasks.Dataflow in Visual Studio, aprire il progetto, scegliere Gestisci pacchetti NuGet dal menu Project e cercare online il pacchetto System.Threading.Tasks.Dataflow. In alternativa, per installarlo usando l'interfaccia della riga di comando di .NET Core, eseguire dotnet add package System.Threading.Tasks.Dataflow.

Costruttori

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

Inizializza una nuova istanza della ActionBlock<TInput> classe con le opzioni di configurazione e azione specificate.

ActionBlock<TInput>(Action<TInput>)

Inizializza una nuova istanza della ActionBlock<TInput> classe con l'azione specificata.

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

Inizializza una nuova istanza della ActionBlock<TInput> classe con le opzioni di configurazione e azione specificate.

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

Inizializza una nuova istanza della ActionBlock<TInput> classe con l'azione specificata.

Proprietà

Nome Descrizione
Completion

Ottiene un Task oggetto che rappresenta l'operazione asincrona e il completamento del blocco del flusso di dati.

InputCount

Ottiene il numero di elementi di input in attesa di essere elaborati da questo blocco.

Metodi

Nome Descrizione
Complete()

Segnala al blocco del flusso di dati che non deve accettare o produrre altri messaggi e non deve utilizzare altri messaggi posticipati.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
Post(TInput)

Inserisce un elemento nel blocco del flusso di dati di destinazione.

ToString()

Restituisce una stringa che rappresenta il nome formattato di questa IDataflowBlock istanza.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IDataflowBlock.Fault(Exception)

Fa sì che il blocco del flusso di dati venga completato in uno stato di errore.

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

Offre un messaggio al blocco del flusso di dati e offre la possibilità di utilizzare o posticipare il messaggio.

Metodi di estensione

Nome Descrizione
AsObserver<TInput>(ITargetBlock<TInput>)

Crea una nuova IObserver<T> astrazione su ITargetBlock<TInput>.

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

Inserisce un elemento nell'oggetto ITargetBlock<TInput>.

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

Offre in modo asincrono un messaggio al blocco di messaggi di destinazione, consentendo il posticipo.

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

Offre in modo asincrono un messaggio al blocco di messaggi di destinazione, consentendo il posticipo.

Si applica a