ActionBlock<TInput> Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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. |