ActionBlock<TInput> Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy adatfolyamblokkot biztosít, amely minden fogadott adatelemhez meghív egy megadott Action<T> meghatalmazottat.
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)
Típusparaméterek
- TInput
Az adattípus, amelyen ez ActionBlock<TInput> működik.
- Öröklődés
-
ActionBlock<TInput>
- Megvalósítás
Példák
Az alábbi példa azt mutatja be, hogy az ActionBlock<TInput> osztály több számítást végez adatfolyamblokkok használatával, és visszaadja a számítások elvégzéséhez szükséges időt. Ez a példakód a How to: Specify the Degree of Parallelism in a Dataflow Block article (A párhuzamosság fokának megadása adatfolyamblokkoló cikkben) című nagyobb példa része.
// 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
Megjegyzések
Note
A TPL-adatfolyamtár (a System.Threading.Tasks.Dataflow névtér) nincs elosztva a .NET-tel. Ha telepíteni szeretné a System.Threading.Tasks.Dataflow névteret a Visual Studióban, nyissa meg a projektet, válassza NuGet-csomagok kezelése a Project menüjében, és keressen online a System.Threading.Tasks.Dataflow csomagra. Másik lehetőségként a .NET Core CLI használatával telepítheti, futtassa a dotnet add package System.Threading.Tasks.Dataflow.
Konstruktorok
| Name | Description |
|---|---|
| ActionBlock<TInput>(Action<TInput>, ExecutionDataflowBlockOptions) |
Inicializálja az ActionBlock<TInput> osztály új példányát a megadott művelet- és konfigurációs beállításokkal. |
| ActionBlock<TInput>(Action<TInput>) |
Inicializálja az osztály új példányát ActionBlock<TInput> a megadott művelettel. |
| ActionBlock<TInput>(Func<TInput,Task>, ExecutionDataflowBlockOptions) |
Inicializálja az ActionBlock<TInput> osztály új példányát a megadott művelet- és konfigurációs beállításokkal. |
| ActionBlock<TInput>(Func<TInput,Task>) |
Inicializálja az osztály új példányát ActionBlock<TInput> a megadott művelettel. |
Tulajdonságok
| Name | Description |
|---|---|
| Completion |
Task Lekéri az adatfolyam-blokk aszinkron működését és befejezését jelképező objektumot. |
| InputCount |
Lekéri a blokk által feldolgozandó bemeneti elemek számát. |
Metódusok
| Name | Description |
|---|---|
| Complete() |
Azt jelzi az adatfolyam-blokknak, hogy nem fogadhat el vagy nem hozhat létre több üzenetet, és nem használhat fel több elhalasztott üzenetet. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| Post(TInput) |
Elem bejegyzése a cél adatfolyamblokkba. |
| ToString() |
Egy sztringet ad vissza, amely a példány formázott nevét IDataflowBlock jelöli. |
Explicit interfész-implementációk
| Name | Description |
|---|---|
| IDataflowBlock.Fault(Exception) |
Az adatfolyamblokk hibás állapotban fejeződik be. |
| ITargetBlock<TInput>.OfferMessage(DataflowMessageHeader, TInput, ISourceBlock<TInput>, Boolean) |
Üzenetet küld az adatfolyam-blokknak, és lehetőséget ad az üzenet felhasználására vagy elhalasztására. |
Bővítő metódusok
| Name | Description |
|---|---|
| AsObserver<TInput>(ITargetBlock<TInput>) |
Új IObserver<T> absztrakciót hoz létre a ITargetBlock<TInput>. |
| Post<TInput>(ITargetBlock<TInput>, TInput) |
Elem bejegyzése a következőre: .> |
| SendAsync<TInput>(ITargetBlock<TInput>, TInput, CancellationToken) |
Aszinkron módon üzenetet küld a célüzenetblokknak, ami lehetővé teszi a halasztást. |
| SendAsync<TInput>(ITargetBlock<TInput>, TInput) |
Aszinkron módon üzenetet küld a célüzenetblokknak, ami lehetővé teszi a halasztást. |