ActionBlock<TInput> Klasa

Definicja

Udostępnia blok przepływu danych, który wywołuje dostarczonego Action<T> delegata dla każdego odebranego elementu danych.

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)

Parametry typu

TInput

Typ danych, na których działa.ActionBlock<TInput>

Dziedziczenie
ActionBlock<TInput>
Implementuje

Przykłady

W poniższym przykładzie pokazano użycie ActionBlock<TInput> klasy do wykonywania kilku obliczeń przy użyciu bloków przepływu danych i zwraca czas, który upłynął do wykonania obliczeń. Ten przykład kodu jest częścią większego przykładu przedstawionego w artykule How to: Specify the Degree of Parallelism in a Dataflow Block (Jak określić stopień równoległości w bloku przepływu danych ).

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

Uwagi

Uwaga

Biblioteka przepływu danych TPL ( System.Threading.Tasks.Dataflow przestrzeń nazw) nie jest dystrybuowana z platformą .NET. Aby zainstalować System.Threading.Tasks.Dataflow przestrzeń nazw w programie Visual Studio, Otwórz projekt, wybierz pozycję Zarządzaj pakietami NuGet z menu projekt i Wyszukaj w trybie online System.Threading.Tasks.Dataflow pakiet. Alternatywnie, aby zainstalować go przy użyciu interfejs wiersza polecenia platformy .NET Core, uruchom polecenie dotnet add package System.Threading.Tasks.Dataflow .

Konstruktory

ActionBlock<TInput>(Action<TInput>)

Inicjuje ActionBlock<TInput> nowe wystąpienie klasy z określoną akcją.

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

Inicjuje ActionBlock<TInput> nowe wystąpienie klasy z określoną akcją i opcjami konfiguracji.

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

Inicjuje ActionBlock<TInput> nowe wystąpienie klasy z określoną akcją.

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

Inicjuje ActionBlock<TInput> nowe wystąpienie klasy z określoną akcją i opcjami konfiguracji.

Właściwości

Completion

Pobiera obiekt reprezentujący operację Task asynchroniczną i zakończenie bloku przepływu danych.

InputCount

Pobiera liczbę elementów wejściowych oczekujących na przetworzenie przez ten blok.

Metody

Complete()

Sygnały do bloku przepływu danych, że nie powinny akceptować ani tworzyć więcej komunikatów i nie powinny zużywać więcej komunikatów odroczone.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
Post(TInput)

Publikuje element w docelowym bloku przepływu danych.

ToString()

Zwraca ciąg reprezentujący sformatowaną nazwę tego IDataflowBlock wystąpienia.

Jawne implementacje interfejsu

IDataflowBlock.Fault(Exception)

Powoduje ukończenie bloku przepływu danych w stanie błędu.

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

Oferuje komunikat do bloku przepływu danych i daje mu możliwość korzystania z komunikatu lub jego odroczenia.

Metody rozszerzania

AsObserver<TInput>(ITargetBlock<TInput>)

Tworzy nową IObserver<T> abstrakcję dla elementu ITargetBlock<TInput>.

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

Publikuje element w elemencie ITargetBlock<TInput>.

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

Asynchronicznie oferuje komunikat do docelowego bloku komunikatów, co pozwala na odroczenie.

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

Asynchronicznie oferuje komunikat do docelowego bloku komunikatów, co pozwala na odroczenie.

Dotyczy