Freigeben über


ActionBlock<TInput>.Completion Eigenschaft

Definition

Ruft ein Task -Objekt ab, das den asynchronen Vorgang und die Vervollständigung des Dataflowblocks darstellt.

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

Eigenschaftswert

Die abgeschlossene Aufgabe.

Implementiert

Beispiele

Im folgenden Beispiel wird gezeigt, wie die Completion -Eigenschaft verwendet wird, um zu warten, bis alle Nachrichten über das Netzwerk weitergegeben werden. Dieses Codebeispiel ist Teil eines größeren Beispiels für das Thema Vorgehensweise: Angeben des Grads an Parallelität in einem Dataflowblock .

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

Hinweise

Ein Dataflowblock gilt als abgeschlossen, wenn er derzeit keine Nachricht verarbeitet und garantiert hat, dass keine weiteren Nachrichten verarbeitet werden. Der zurückgegebene wechselt in einen abgeschlossenen Zustand, wenn der zugeordnete Task Block abgeschlossen ist. Er wechselt in den RanToCompletion Zustand, wenn der Block seine Verarbeitung gemäß der definierten Semantik des Dataflowblocks erfolgreich abgeschlossen hat. Es wechselt in den Faulted Zustand, wenn der Dataflowblock die Verarbeitung aufgrund einer nicht behandelten Ausnahme vorzeitig abgeschlossen hat, und er wechselt in den Canceled Zustand, wenn die Verarbeitung des Dataflowblocks nach Empfang einer Abbruchanforderung vorzeitig abgeschlossen wurde. Wenn die Aufgabe im Zustand abgeschlossen wird, gibt die FaultedException -Eigenschaft eine AggregateException Ausnahme zurück, die eine oder mehrere Ausnahmen enthält, die dazu geführt haben, dass der Block fehlschlägt.

Gilt für: