ActionBlock<TInput>.Completion Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.