Partager via


ActionBlock<TInput>.Completion Propriété

Définition

Obtient un Task objet qui représente l’opération asynchrone et l’achèvement du bloc de flux de données.

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

Valeur de propriété

Tâche terminée.

Implémente

Exemples

L’exemple suivant montre comment utiliser la Completion propriété pour attendre que tous les messages se propagent sur le réseau. Cet exemple de code fait partie d’un exemple plus large fourni pour la rubrique Guide pratique pour spécifier le degré de parallélisme dans un bloc de flux de données .

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

Remarques

Un bloc de flux de données est considéré comme terminé lorsqu’il ne traite pas de message et qu’il a garanti qu’il ne traitera plus de messages. Le retourné Task passe à un état terminé une fois le bloc associé terminé. Il passe à l’état RanToCompletion lorsque le bloc termine son traitement correctement en fonction de la sémantique définie du bloc de flux de données. Il passe à l’état Faulted lorsque le bloc de flux de données a terminé son traitement prématurément en raison d’une exception non gérée, et il passe à l’état Canceled lorsque le bloc de flux de données a terminé de traiter prématurément après la réception d’une demande d’annulation. Si la tâche se termine dans l’état Faulted , sa Exception propriété retourne une AggregateException exception qui contient une ou plusieurs exceptions qui ont provoqué l’échec du bloc.

S’applique à