ActionBlock<TInput> Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет блок потока данных, вызывающий предоставленный Action<T> делегат для каждого полученного элемента данных.
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> работает.
- Наследование
-
ActionBlock<TInput>
- Реализации
Примеры
В следующем примере показано использование ActionBlock<TInput> класса для выполнения нескольких вычислений с помощью блоков потока данных и возвращает истекшее время, необходимое для выполнения вычислений. Этот пример кода является частью более крупного примера, предоставленного для руководства. Указание степени параллелизма в статье блока потока данных .
// 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
Комментарии
Note
Библиотека потоков данных TPL (пространство имен System.Threading.Tasks.Dataflow) не распространяется с помощью .NET. Чтобы установить пространство имен System.Threading.Tasks.Dataflow в Visual Studio, откройте проект, выберите Управление пакетами NuGet в меню Project и найдите пакет System.Threading.Tasks.Dataflow в Интернете. Кроме того, чтобы установить его с помощью cli .NET Core, запустите dotnet add package System.Threading.Tasks.Dataflow.
Конструкторы
| Имя | Описание |
|---|---|
| ActionBlock<TInput>(Action<TInput>, ExecutionDataflowBlockOptions) |
Инициализирует новый экземпляр ActionBlock<TInput> класса с указанными параметрами действия и конфигурации. |
| ActionBlock<TInput>(Action<TInput>) |
Инициализирует новый экземпляр ActionBlock<TInput> класса с указанным действием. |
| ActionBlock<TInput>(Func<TInput,Task>, ExecutionDataflowBlockOptions) |
Инициализирует новый экземпляр ActionBlock<TInput> класса с указанными параметрами действия и конфигурации. |
| ActionBlock<TInput>(Func<TInput,Task>) |
Инициализирует новый экземпляр ActionBlock<TInput> класса с указанным действием. |
Свойства
| Имя | Описание |
|---|---|
| Completion |
Task Возвращает объект, представляющий асинхронную операцию и завершение блока потока данных. |
| InputCount |
Возвращает количество входных элементов, ожидающих обработки этим блоком. |
Методы
| Имя | Описание |
|---|---|
| Complete() |
Сигнализирует блоку потока данных о том, что он не должен принимать или создавать больше сообщений и не должен использовать больше отложенных сообщений. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| Post(TInput) |
Отправляет элемент в целевой блок потока данных. |
| ToString() |
Возвращает строку, представляющую отформатированное имя этого IDataflowBlock экземпляра. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IDataflowBlock.Fault(Exception) |
Приводит к завершению блока потока данных в состоянии сбоя. |
| ITargetBlock<TInput>.OfferMessage(DataflowMessageHeader, TInput, ISourceBlock<TInput>, Boolean) |
Предлагает сообщение блоку потока данных и дает ему возможность использовать или отложить сообщение. |
Методы расширения
| Имя | Описание |
|---|---|
| AsObserver<TInput>(ITargetBlock<TInput>) |
Создает новую IObserver<T> абстракцию поверх ITargetBlock<TInput>. |
| Post<TInput>(ITargetBlock<TInput>, TInput) |
Отправляет элемент в элемент ITargetBlock<TInput>. |
| SendAsync<TInput>(ITargetBlock<TInput>, TInput, CancellationToken) |
Асинхронно предлагает сообщение целевому блоку сообщений, что позволяет отложить. |
| SendAsync<TInput>(ITargetBlock<TInput>, TInput) |
Асинхронно предлагает сообщение целевому блоку сообщений, что позволяет отложить. |