ActionBlock<TInput>.Completion プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データフロー ブロックの Task 非同期操作と完了を表す オブジェクトを取得します。
public:
property System::Threading::Tasks::Task ^ Completion { System::Threading::Tasks::Task ^ get(); };
public System.Threading.Tasks.Task Completion { get; }
member this.Completion : System.Threading.Tasks.Task
Public ReadOnly Property Completion As Task
プロパティ値
完了したタスク。
実装
例
次の例では、 プロパティを Completion 使用して、すべてのメッセージがネットワーク経由で伝達されるのを待機する方法を示します。 このコード例は、「 方法: データフロー ブロックで並列処理の次数を指定する」トピックで提供 されるより大きな例の一部です。
// 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
注釈
データフロー ブロックは、現在メッセージを処理していない場合、およびそれ以上メッセージを処理しないことが保証されている場合に完了したと見なされます。 返された Task は、関連付けられたブロックが完了すると、完了状態に遷移します。 ブロックがデータフロー ブロックの定義された RanToCompletion セマンティクスに従って処理を正常に完了すると、状態に遷移します。 未処理の Faulted 例外が原因でデータフロー ブロックの処理が途中で完了すると状態に遷移し、取り消し要求を受信した後にデータフロー ブロックの処理が途中で完了すると状態に遷移 Canceled します。 タスクが状態で Faulted 完了した場合、その Exception
プロパティは、ブロックが失敗する原因となった 1 つ以上の例外を含む例外を返 AggregateException します。
適用対象
.NET