ParallelLoopState.Break Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Teilt mit, dass die Schleife die Parallel Ausführung von Iterationen über die aktuelle Iteration hinaus bei der frühesten Benutzerfreundlichkeit des Systems beenden sollte.
public:
void Break();
public void Break();
member this.Break : unit -> unit
Public Sub Break ()
Ausnahmen
Die Stop() Methode wurde zuvor aufgerufen. Break() und Stop() kann nicht in Kombination durch Iterationen derselben Schleife verwendet werden.
Beispiele
Im folgenden Beispiel werden bis zu 100 Iterationen einer Schleife parallel ausgeführt. Jede Iteration hält für ein zufälliges Intervall von 1 bis 1.000 Millisekunden an. Ein zufällig generierter Wert bestimmt, welche Iteration der Schleife die Break Methode aufgerufen wird. Wie die Ausgabe aus dem Beispiel zeigt, werden nach dem Aufruf der Break Methode keine Iterationen ausgeführt, deren Index größer als der LowestBreakIteration Eigenschaftswert ist.
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
Da Iterationen der Schleife beim Aufrufen der Break Methode immer noch ausgeführt werden, ruft jede Iteration die ShouldExitCurrentIteration Eigenschaft auf, um zu überprüfen, ob eine andere Iteration die Break Methode aufgerufen hat. Wenn der Eigenschaftswert lautet true, überprüft die Iteration den Wert der LowestBreakIteration Eigenschaft, und wenn er größer als der Indexwert der aktuellen Iteration ist, wird sofort zurückgegeben.
Hinweise
Break gibt an, dass nach der aktuellen Iteration keine Iterationen ausgeführt werden sollen. Sie bricht effektiv alle zusätzlichen Iterationen der Schleife ab. Sie stoppt jedoch keine Iterationen, die bereits mit der Ausführung begonnen haben. Wenn z Break . B. von der 100. Iteration einer parallelen Schleife, die von 0 bis 1.000 durchlaufen wird, sollten alle Iterationen unter 100 weiterhin ausgeführt werden, aber die Iterationen von 101 bis 1000, die noch nicht gestartet wurden, werden nicht ausgeführt.
Bei langen Iterationen, die möglicherweise bereits ausgeführt werden, wird die LowestBreakIteration Eigenschaft auf den Index der aktuellen Iteration festgelegt, Break wenn der aktuelle Index kleiner als der aktuelle Wert istLowestBreakIteration. Um Iterationen zu beenden, deren Index größer als die niedrigste Unterbrechungsiteration von der konkurrierenden Ausführung ist, sollten Sie die folgenden Schritte ausführen:
Überprüfen Sie, ob die ShouldExitCurrentIteration Eigenschaft ist
true.Beenden Sie die Iteration, wenn ihr Index größer als der LowestBreakIteration Eigenschaftswert ist.
Das Beispiel stellt eine Abbildung bereit.
Break wird in der Regel in suchbasierten Algorithmen verwendet, bei denen eine Sortierung in der Datenquelle vorhanden ist.