ActionBlock<TInput>.Completion Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar ett Task objekt som representerar den asynkrona åtgärden och slutförandet av dataflödesblocket.
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
Egenskapsvärde
Den slutförda uppgiften.
Implementeringar
Exempel
I följande exempel visas hur du använder Completion egenskapen för att vänta tills alla meddelanden sprids via nätverket. Det här kodexemplet är en del av ett större exempel för avsnittet Så här: Ange graden av parallellitet i ett dataflödesblock .
// 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
Kommentarer
Ett dataflödesblock anses vara slutfört när det för närvarande inte bearbetar ett meddelande och när det har garanterat att det inte kommer att bearbeta fler meddelanden. Den returnerade Task övergår till ett slutfört tillstånd när det associerade blocket har slutförts. Det övergår till tillståndet RanToCompletion när blocket slutför bearbetningen enligt dataflödesblockets definierade semantik. Det övergår till tillståndet Faulted när dataflödesblocket har slutfört bearbetningen i förtid på grund av ett ohanterat undantag, och det övergår till Canceled tillståndet när dataflödesblocket har slutfört bearbetningen i förtid efter att ha fått en begäran om annullering. Om aktiviteten slutförs i Faulted tillståndet returnerar dess Exception egenskap ett AggregateException undantag som innehåller ett eller flera undantag som gjorde att blocket misslyckades.