ParallelLoopState Sınıf
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.
Diğer yinelemelerle etkileşime geçmek için paralel döngülerin yinelemelerini etkinleştirir. Bu sınıfın bir örneği sınıfı tarafından Parallel her döngüye sağlanır; kodunuzda örnek oluşturamayın.
public ref class ParallelLoopState
public class ParallelLoopState
type ParallelLoopState = class
Public Class ParallelLoopState
- Devralma
-
ParallelLoopState
Örnekler
Aşağıdaki örnek bir döngünün en çok 100 yinelemesini paralel olarak yürütür. Her yineleme 1 ile 1.000 milisaniye arasında rastgele bir aralık için duraklatılır. Rastgele oluşturulan bir değer, yönteminin döngünün hangi yinelemesinde çağrıldığını Break belirler. Örnekteki çıktıda gösterildiği gibi, dizini özellik değerinden LowestBreakIteration büyük olan hiçbir yineleme yöntem çağrısından Break sonra başlamaz.
using System;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
var rnd = new Random();
int breakIndex = rnd.Next(1, 11);
Console.WriteLine($"Will call Break at iteration {breakIndex}\n");
var result = Parallel.For(1, 101, (i, state) =>
{
Console.WriteLine($"Beginning iteration {i}");
int delay;
lock (rnd)
delay = rnd.Next(1, 1001);
Thread.Sleep(delay);
if (state.ShouldExitCurrentIteration)
{
if (state.LowestBreakIteration < i)
return;
}
if (i == breakIndex)
{
Console.WriteLine($"Break in iteration {i}");
state.Break();
}
Console.WriteLine($"Completed iteration {i}");
});
if (result.LowestBreakIteration.HasValue)
Console.WriteLine($"\nLowest Break Iteration: {result.LowestBreakIteration}");
else
Console.WriteLine($"\nNo lowest break iteration.");
}
}
// The example displays output like the following:
// Will call Break at iteration 8
//
// Beginning iteration 1
// Beginning iteration 13
// Beginning iteration 97
// Beginning iteration 25
// Beginning iteration 49
// Beginning iteration 37
// Beginning iteration 85
// Beginning iteration 73
// Beginning iteration 61
// Completed iteration 85
// Beginning iteration 86
// Completed iteration 61
// Beginning iteration 62
// Completed iteration 86
// Beginning iteration 87
// Completed iteration 37
// Beginning iteration 38
// Completed iteration 38
// Beginning iteration 39
// Completed iteration 25
// Beginning iteration 26
// Completed iteration 26
// Beginning iteration 27
// Completed iteration 73
// Beginning iteration 74
// Completed iteration 62
// Beginning iteration 63
// Completed iteration 39
// Beginning iteration 40
// Completed iteration 40
// Beginning iteration 41
// Completed iteration 13
// Beginning iteration 14
// Completed iteration 1
// Beginning iteration 2
// Completed iteration 97
// Beginning iteration 98
// Completed iteration 49
// Beginning iteration 50
// Completed iteration 87
// Completed iteration 27
// Beginning iteration 28
// Completed iteration 50
// Beginning iteration 51
// Beginning iteration 88
// Completed iteration 14
// Beginning iteration 15
// Completed iteration 15
// Completed iteration 2
// Beginning iteration 3
// Beginning iteration 16
// Completed iteration 63
// Beginning iteration 64
// Completed iteration 74
// Beginning iteration 75
// Completed iteration 41
// Beginning iteration 42
// Completed iteration 28
// Beginning iteration 29
// Completed iteration 29
// Beginning iteration 30
// Completed iteration 98
// Beginning iteration 99
// Completed iteration 64
// Beginning iteration 65
// Completed iteration 42
// Beginning iteration 43
// Completed iteration 88
// Beginning iteration 89
// Completed iteration 51
// Beginning iteration 52
// Completed iteration 16
// Beginning iteration 17
// Completed iteration 43
// Beginning iteration 44
// Completed iteration 44
// Beginning iteration 45
// Completed iteration 99
// Beginning iteration 4
// Completed iteration 3
// Beginning iteration 8
// Completed iteration 4
// Beginning iteration 5
// Completed iteration 52
// Beginning iteration 53
// Completed iteration 75
// Beginning iteration 76
// Completed iteration 76
// Beginning iteration 77
// Completed iteration 65
// Beginning iteration 66
// Completed iteration 5
// Beginning iteration 6
// Completed iteration 89
// Beginning iteration 90
// Completed iteration 30
// Beginning iteration 31
// Break in iteration 8
// Completed iteration 8
// Completed iteration 6
// Beginning iteration 7
// Completed iteration 7
//
// Lowest Break Iteration: 8
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim rnd As New Random()
Dim breakIndex As Integer = rnd.Next(1, 11)
Dim lowest As New Nullable(Of Long)()
Console.WriteLine("Will call Break at iteration {0}", breakIndex)
Console.WriteLine()
Dim result = Parallel.For(1, 101, Sub(i, state)
Console.WriteLine("Beginning iteration {0}", i)
Dim delay As Integer
Monitor.Enter(rnd)
delay = rnd.Next(1, 1001)
Monitor.Exit(rnd)
Thread.Sleep(delay)
If state.ShouldExitCurrentIteration Then
If state.LowestBreakIteration < i Then
Return
End If
End If
If i = breakIndex Then
Console.WriteLine("Break in iteration {0}", i)
state.Break()
If state.LowestBreakIteration.HasValue Then
If lowest < state.LowestBreakIteration Then
lowest = state.LowestBreakIteration
Else
lowest = state.LowestBreakIteration
End If
End If
End If
Console.WriteLine("Completed iteration {0}", i)
End Sub )
Console.WriteLine()
If lowest.HasValue Then
Console.WriteLine("Lowest Break Iteration: {0}", lowest)
Else
Console.WriteLine("No lowest break iteration.")
End If
End Sub
End Module
' The example displays output like the following:
' Will call Break at iteration 8
'
' Beginning iteration 1
' Beginning iteration 13
' Beginning iteration 97
' Beginning iteration 25
' Beginning iteration 49
' Beginning iteration 37
' Beginning iteration 85
' Beginning iteration 73
' Beginning iteration 61
' Completed iteration 85
' Beginning iteration 86
' Completed iteration 61
' Beginning iteration 62
' Completed iteration 86
' Beginning iteration 87
' Completed iteration 37
' Beginning iteration 38
' Completed iteration 38
' Beginning iteration 39
' Completed iteration 25
' Beginning iteration 26
' Completed iteration 26
' Beginning iteration 27
' Completed iteration 73
' Beginning iteration 74
' Completed iteration 62
' Beginning iteration 63
' Completed iteration 39
' Beginning iteration 40
' Completed iteration 40
' Beginning iteration 41
' Completed iteration 13
' Beginning iteration 14
' Completed iteration 1
' Beginning iteration 2
' Completed iteration 97
' Beginning iteration 98
' Completed iteration 49
' Beginning iteration 50
' Completed iteration 87
' Completed iteration 27
' Beginning iteration 28
' Completed iteration 50
' Beginning iteration 51
' Beginning iteration 88
' Completed iteration 14
' Beginning iteration 15
' Completed iteration 15
' Completed iteration 2
' Beginning iteration 3
' Beginning iteration 16
' Completed iteration 63
' Beginning iteration 64
' Completed iteration 74
' Beginning iteration 75
' Completed iteration 41
' Beginning iteration 42
' Completed iteration 28
' Beginning iteration 29
' Completed iteration 29
' Beginning iteration 30
' Completed iteration 98
' Beginning iteration 99
' Completed iteration 64
' Beginning iteration 65
' Completed iteration 42
' Beginning iteration 43
' Completed iteration 88
' Beginning iteration 89
' Completed iteration 51
' Beginning iteration 52
' Completed iteration 16
' Beginning iteration 17
' Completed iteration 43
' Beginning iteration 44
' Completed iteration 44
' Beginning iteration 45
' Completed iteration 99
' Beginning iteration 4
' Completed iteration 3
' Beginning iteration 8
' Completed iteration 4
' Beginning iteration 5
' Completed iteration 52
' Beginning iteration 53
' Completed iteration 75
' Beginning iteration 76
' Completed iteration 76
' Beginning iteration 77
' Completed iteration 65
' Beginning iteration 66
' Completed iteration 5
' Beginning iteration 6
' Completed iteration 89
' Beginning iteration 90
' Completed iteration 30
' Beginning iteration 31
' Break in iteration 8
' Completed iteration 8
' Completed iteration 6
' Beginning iteration 7
' Completed iteration 7
'
' Lowest Break Iteration: 8
Yöntem çağrıldığında döngü yinelemeleri hala yürütülmekte olduğundan, her yineleme başka bir yinelemenin BreakShouldExitCurrentIteration yöntemini çağırıp çağırmadığını denetlemek için özelliğini çağırır Break . Özellik değeri ise true
, yineleme özelliğin LowestBreakIteration değerini denetler ve geçerli yinelemenin dizin değerinden büyükse hemen döndürür.
Açıklamalar
Bu sınıfın örneğini oluşturamayacağınızı unutmayın. Derleyici tarafından veya Parallel.ForEach yöntemine yapılan bir çağrıda Parallel.For bağımsız değişken olarak otomatik olarak oluşturulur. Örnek, bir gösterim sağlar.
ve foreach
(C#'ta) ve For Each
For
(Visual Basic'te) gibi for
yapılar en düşük dizinden en yükseğe veya kümedeki ilk nesneden son dizine sıralı olarak yürütülür. Buna karşılık ve Parallel.ForParallel.ForEach yöntemleri bunu yapmaz. Döngünün tek tek yinelemeleri paralel olarak çalıştırıldığından, herhangi bir sırada başlayıp sona erebilir. sınıfı, ParallelLoopState paralel döngülerin tek tek yinelemelerinin birbiriyle etkileşim kurmasına olanak tanır.
ParallelLoopState sınıfı şunları yapmanızı sağlar:
Geçerli yinelemeden çıkın ve yöntemini çağırarak ek yinelemelerin başlatılmasını Stop engelleyin. Bu, yürütmeye başlamış olan yinelemeleri etkilemez.
Geçerli dizinden büyük bir dizine sahip yinelemelerin yöntemini çağırarak yürütülmesini Break önleyin. Bu, yürütmeye başlamış olan yinelemeleri etkilemez.
özelliğinin değerini IsExceptional alarak herhangi bir döngü yinelemesinde bir özel durumun oluşup oluşmadığını belirleyin.
özelliğinin değerini IsStopped alarak döngünün herhangi bir yinelemesinin yöntemini çağırıp çağırmadığını Stop belirleyin. Yöntemine çağrıdan önce başlatılan ancak hala yürütülmekte olan döngünün yinelemelerinden dönmek için Stop bu özelliği kullanabilirsiniz.
Döngünün herhangi bir yinelemesinin veya Stop yöntemini çağırıp çağırmadığını Break veya özelliğinin değerini ShouldExitCurrentIteration alarak bir özel durum oluşturup oluşturmadığını belirleyin.
Dizini, özelliğinin değerini alarak Break'in çağrıldığı bir yinelemenin dizininden büyük olan uzun süre çalışan bir yinelemeden LowestBreakIteration çıkın.
Özellikler
IsExceptional |
Döngünün herhangi bir yinelemesinin bu yineleme tarafından işlenmeyen bir özel durum oluşturup oluşturmadığını alır. |
IsStopped |
Döngünün herhangi bir yinelemesinin yöntemini çağırıp çağırmadığını Stop() alır. |
LowestBreakIteration |
Çağrılan döngünün Break() en düşük yinelemesini alır. |
ShouldExitCurrentIteration |
Bu veya diğer yinelemeler tarafından yapılan isteklere göre döngünün geçerli yinelemesinin çıkıp çıkmayacağını alır. |
Yöntemler
Break() |
Döngünün Parallel , sistemin en erken kolaylığında geçerli yinelemenin ötesinde yinelemelerin yürütülmesini durdurması gerektiğini iletir. |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
Stop() |
Döngünün Parallel sistemin en erken rahatlığında yürütmeyi durdurması gerektiğini iletir. |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
Şunlara uygulanır
İş Parçacığı Güvenliği
Örnek ParallelLoopState , yalnızca bir örneğin sağlandığı döngünün gövdesinde kullanılmak üzere tasarlanır. İlişkili döngü sona erdikten sonra sağlanan ParallelLoopState bir örneği kullanmak güvenli değildir ve bunu diğer iş parçacıklarına açıkça teslim etmek ve bu iş parçacıklarının herhangi bir zamanda erişmesini sağlamak güvenli değildir. Bir döngüde yer alan her iş parçacığına farklı ParallelLoopState bir örnek sağlanacaktır.