ActionBlock<TInput>.Completion Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Zaman uyumsuz işlemi ve veri akışı bloğunun tamamlanmasını temsil eden bir Task nesnesi alır.
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
Özellik Değeri
Tamamlanan görev.
Uygulamalar
Örnekler
Aşağıdaki örnekte, tüm iletilerin ağ üzerinden yayılmasını Completion beklemek için özelliğinin nasıl kullanılacağı gösterilmektedir. Bu kod örneği, Nasıl yapılır: Veri Akışı Bloğunda Paralellik Derecesini Belirtme konusu için sağlanan daha büyük bir örneğin parçasıdır.
// 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
Açıklamalar
Veri akışı bloğu, şu anda bir iletiyi işlemediğinde ve daha fazla ileti işlemeyeceğini garanti ettiğinde tamamlanmış olarak kabul edilir. İlişkili blok tamamlandığında döndürülen Task tamamlanmış duruma geçirilecektir. Blok, veri akışı bloğunun RanToCompletion tanımlı semantiğine göre işlemesini başarıyla tamamladığında duruma geçiş yapacaktır. İşlenmeyen Faulted bir özel durum nedeniyle veri akışı bloğu işlemeyi erken tamamladığında duruma geçiş yapar ve bir iptal isteği aldıktan sonra veri akışı bloğu işlemeyi erken tamamladığında duruma geçiş Canceled yapar. Görev durumunda tamamlanırsa, özelliği bloğun FaultedException
başarısız olmasına neden olan bir veya daha fazla özel durum içeren bir AggregateException özel durum döndürür.