ActionBlock<TInput> Osztály

Definíció

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.

A következőre érvényes: