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
Комментарии
Примечание
Библиотека потоков данных TPL (пространство имен System.Threading.Tasks.Dataflow) не поставляется с .NET. Чтобы установить пространство имен System.Threading.Tasks.Dataflow в Visual Studio, откройте проект, выберите Управление пакетами NuGet в меню Проект и выполните поиск пакета System.Threading.Tasks.Dataflow
в Интернете. Вы также можете установить его, выполнив в .NET Core CLI команду dotnet add package System.Threading.Tasks.Dataflow
.
Конструкторы
ActionBlock<TInput>(Action<TInput>) |
Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием. |
ActionBlock<TInput>(Action<TInput>, ExecutionDataflowBlockOptions) |
Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием и параметрами конфигурации. |
ActionBlock<TInput>(Func<TInput,Task>) |
Инициализирует новый экземпляр класса ActionBlock<TInput> с указанным действием. |
ActionBlock<TInput>(Func<TInput,Task>, ExecutionDataflowBlockOptions) |
Инициализирует новый экземпляр класса 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) |
Асинхронно предлагает сообщение в целевому блоку сообщений, позволяет задержки. |
SendAsync<TInput>(ITargetBlock<TInput>, TInput, CancellationToken) |
Асинхронно предлагает сообщение в целевому блоку сообщений, позволяет задержки. |