ActionBlock<TInput> Класс

Определение

Предоставляет блок потока данных, который вызывает предоставленный делегат Action<T> для каждого полученного элемента данных.Provides a dataflow block that invokes a provided Action<T> delegate for every data element received.

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)

Параметры типа

TInput

Тип данных, на которые действует этот объект ActionBlock<TInput>.The type of data that this ActionBlock<TInput> operates on.

Наследование
ActionBlock<TInput>
Реализации

Примеры

В следующем примере показано использование ActionBlock<TInput> класса для выполнения нескольких вычислений с помощью блоков потока данных и возврата времени, необходимого для выполнения вычислений.The following example shows the use of the ActionBlock<TInput> class to perform several computations using dataflow blocks, and returns the elapsed time required to perform the computations. Этот пример кода является частью большого примера, приведенного в разделе как указать степень параллелизма в блоке потока данных.This code example is part of a larger example provided for the How to: Specify the Degree of Parallelism in a Dataflow Block topic.

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

Комментарии

Примечание

Библиотека потоков данных TPL (пространство имен System.Threading.Tasks.Dataflow) не поставляется с .NET.The TPL Dataflow Library (the System.Threading.Tasks.Dataflow namespace) is not distributed with .NET. Чтобы установить пространство имен System.Threading.Tasks.Dataflow в Visual Studio, откройте проект, выберите Управление пакетами NuGet в меню Проект и выполните поиск пакета System.Threading.Tasks.Dataflow в Интернете.To install the System.Threading.Tasks.Dataflow namespace in Visual Studio, open your project, choose Manage NuGet Packages from the Project menu, and search online for the System.Threading.Tasks.Dataflow package. Вы также можете установить его, выполнив в .NET Core CLI команду dotnet add package System.Threading.Tasks.Dataflow.Alternatively, to install it using the .NET Core CLI, run dotnet add package System.Threading.Tasks.Dataflow.

Конструкторы

ActionBlock<TInput>(Action<TInput>)

Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием.Initializes a new instance of the ActionBlock<TInput> class with the specified action.

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

Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием и параметрами конфигурации.Initializes a new instance of the ActionBlock<TInput> class with the specified action and configuration options.

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

Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием.Initializes a new instance of the ActionBlock<TInput> class with the specified action.

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

Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием и параметрами конфигурации.Initializes a new instance of the ActionBlock<TInput> class with the specified action and configuration options.

Свойства

Completion

Получает объект Task, представляющий асинхронную операцию и завершение блока потока данных.Gets a Task object that represents the asynchronous operation and completion of the dataflow block.

InputCount

Получает количество входных элементов, ожидающих обработки этим блоком.Gets the number of input items waiting to be processed by this block.

Методы

Complete()

Сообщает блоку потока данных, что он больше не должен принимать и создавать сообщения и поглощать отложенные сообщения.Signals to the dataflow block that it shouldn't accept or produce any more messages and shouldn't consume any more postponed messages.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
Post(TInput)

Публикует элемент в целевой блок потока данных.Posts an item to the target dataflow block.

ToString()

Возвращает строку, представляющую отформатированное имя данного экземпляра IDataflowBlock.Returns a string that represents the formatted name of this IDataflowBlock instance.

Явные реализации интерфейса

IDataflowBlock.Fault(Exception)

Вызывает выполнение блока потока данных в состоянии сбоя.Causes the dataflow block to complete in a faulted state.

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

Предлагает сообщение блоку потока данных, предоставляя целевому объекту возможность потребить или отложить его.Offers a message to the dataflow block, and gives it the opportunity to consume or postpone the message.

Методы расширения

AsObserver<TInput>(ITargetBlock<TInput>)

Создает новую абстракцию IObserver<T> для ITargetBlock<TInput>.Creates a new IObserver<T> abstraction over the ITargetBlock<TInput>.

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

Отправляет элемент в объект ITargetBlock<TInput>.Posts an item to the ITargetBlock<TInput>.

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

Асинхронно предлагает сообщение в целевому блоку сообщений, позволяет задержки.Asynchronously offers a message to the target message block, allowing for postponement.

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

Асинхронно предлагает сообщение в целевому блоку сообщений, позволяет задержки.Asynchronously offers a message to the target message block, allowing for postponement.

Применяется к