Partager via


ActionBlock<TInput> Classe

Définition

Fournit un bloc de flux de données qui appelle un délégué Action<T> fourni pour chaque élément de données reçu.

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)

Paramètres de type

TInput

Type de données sur lequel ce ActionBlock<TInput> intervient.

Héritage
ActionBlock<TInput>
Implémente

Exemples

L’exemple suivant montre l’utilisation de la ActionBlock<TInput> classe pour effectuer plusieurs calculs à l’aide de blocs de flux de données et retourne le temps écoulé nécessaire pour effectuer les calculs. Cet exemple de code fait partie d’un exemple plus large fourni pour l’article How to: Specify the Degree of Parallelism in a Dataflow Block article.

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

Remarques

Notes

La bibliothèque de flux de données TPL (espace de noms System.Threading.Tasks.Dataflow) n'est pas distribuée avec .NET. Pour installer l’espace de noms System.Threading.Tasks.Dataflow dans Visual Studio, ouvrez votre projet, choisissez Gérer les packages NuGet dans le menu Projet, puis recherchez en ligne le package System.Threading.Tasks.Dataflow. Vous pouvez également l’installer à l’aide de l’interface CLI .NET Core en exécutant dotnet add package System.Threading.Tasks.Dataflow.

Constructeurs

ActionBlock<TInput>(Action<TInput>)

Initialise une nouvelle instance de la classe ActionBlock<TInput> avec l'action spécifiée.

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

Initialise une nouvelle instance de la classe ActionBlock<TInput> avec l'action et les options de configuration spécifiées.

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

Initialise une nouvelle instance de la classe ActionBlock<TInput> avec l'action spécifiée.

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

Initialise une nouvelle instance de la classe ActionBlock<TInput> avec l'action et les options de configuration spécifiées.

Propriétés

Completion

Obtient un objet Task qui représente l’opération asynchrone et l’achèvement du bloc de flux de données.

InputCount

Obtient le nombre d'éléments d'entrée en attente de traitement par ce bloc.

Méthodes

Complete()

Signale au bloc de flux de données qu’il ne doit plus recevoir ni produire de messages ou utiliser des messages différés.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
Post(TInput)

Publie un élément dans le bloc cible de flux de données.

ToString()

Retourne une chaîne qui représente le nom mis en forme de cette instance IDataflowBlock.

Implémentations d’interfaces explicites

IDataflowBlock.Fault(Exception)

Provoque la fin du bloc de flux de données avec un état d'erreur.

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

Offre un message au bloc de flux de données et lui donne la possibilité de le consommer ou le différer.

Méthodes d’extension

AsObserver<TInput>(ITargetBlock<TInput>)

Crée une abstraction IObserver<T> sur ITargetBlock<TInput>.

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

Publie un élément à ITargetBlock<TInput>.

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

Propose de façon asynchrone un message au bloc de message cible, en autorisant l'ajournement.

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

Propose de façon asynchrone un message au bloc de message cible, en autorisant l'ajournement.

S’applique à