次の方法で共有


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 と一緒には配布されません。 Visual Studio に System.Threading.Tasks.Dataflow 名前空間をインストールするには、プロジェクトを開き、 [プロジェクト] メニューの [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>)

ITargetBlock<TInput> の新しい IObserver<T> 抽象化を作成します。

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

ITargetBlock<TInput> に項目をポストします。

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

ターゲット メッセージ ブロックにメッセージを非同期的に提供し、遅延を可能にします。

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

ターゲット メッセージ ブロックにメッセージを非同期的に提供し、遅延を可能にします。

適用対象