ParallelLoopState ParallelLoopState ParallelLoopState ParallelLoopState Class

Definition

Ermöglicht Iterationen von parallelen Schleifen die Interaktion mit anderen Iterationen.Enables iterations of parallel loops to interact with other iterations. Eine Instanz dieser Klasse wird von der Parallel-Klasse für jede Schleife bereitgestellt. Sie können keine Instanzen im Code erstellen.An instance of this class is provided by the Parallel class to each loop; you can not create instances in your code.

public ref class ParallelLoopState
public class ParallelLoopState
type ParallelLoopState = class
Public Class ParallelLoopState
Vererbung
ParallelLoopStateParallelLoopStateParallelLoopStateParallelLoopState

Beispiele

Im folgenden Beispiel werden bis zu 100 Iterationen einer Schleife parallel ausgeführt.The following example executes up to 100 iterations of a loop in parallel. Jede Iterations Pause wird für ein zufälliges Intervall von 1 bis 1.000 Millisekunden angehalten.Each iteration pauses for a random interval from 1 to 1,000 milliseconds. Ein zufällig generierter Wert bestimmt, in welcher Iterations Schleife die Break Methode aufgerufen wird.A randomly generated value determines on which iteration of the loop the Break method is called. Wie die Ausgabe des Beispiels zeigt, werden keine Iterationen, deren Index größer ist als LowestBreakIteration der-Eigenschafts Wert, nach dem Break aufrufungs aufrufungs Methode gestartet.As the output from the example shows, no iterations whose index is greater than the LowestBreakIteration property value start after the call to the Break method.

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);
      Nullable<long> lowest = new Nullable<long>();

      Console.WriteLine("Will call Break at iteration {0}\n",
                        breakIndex);

      var result = Parallel.For(1, 101, (i, state) => {
                                            Console.WriteLine("Beginning iteration {0}", i);
                                            int delay;
                                            Monitor.Enter(rnd);
                                               delay = rnd.Next(1, 1001);
                                            Monitor.Exit(rnd);
                                            Thread.Sleep(delay);
                                            
                                            if (state.ShouldExitCurrentIteration) {
                                               if (state.LowestBreakIteration < i)
                                                  return;
                                            }

                                            if (i == breakIndex) {
                                               Console.WriteLine("Break in iteration {0}", i);
                                               state.Break();
                                               if (state.LowestBreakIteration.HasValue)
                                                  if (lowest < state.LowestBreakIteration)
                                                     lowest = state.LowestBreakIteration;
                                                  else
                                                     lowest = state.LowestBreakIteration;
                                            }

                                            Console.WriteLine("Completed iteration {0}", i);
                                       });
         if (lowest.HasValue)
            Console.WriteLine("\nLowest Break Iteration: {0}", lowest);
         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 wahrscheinlich beim Aufrufen der Break -Methode ausgeführt werden, ruft jede Iteration die ShouldExitCurrentIteration -Eigenschaft auf, um zu überprüfen, ob die Break -Methode von einer anderen Iteration aufgerufen wurde.Because iterations of the loop are still likely to be executing when the Break method is called, each iteration calls the ShouldExitCurrentIteration property to check whether another iteration has called the Break method. Wenn der-Eigenschafts trueWert ist, überprüft die Iterations Werte den LowestBreakIteration Wert der-Eigenschaft, und wenn dieser größer als der Indexwert der aktuellen Iterations ist, wird sofort zurückgegeben.If the property value is true, the iteration checks the value of the LowestBreakIteration property and, if it is greater than the current iteration's index value, returns immediately.

Hinweise

Beachten Sie, dass Sie eine Instanz dieser Klasse nicht instanziieren können.Note that you cannot instantiate an instance of this class. Sie wird automatisch vom Compiler als Argument in einem Rückruf der Parallel.For -oder Parallel.ForEach -Methode generiert.It is automatically generated by the compiler as an argument in a call to the Parallel.For or Parallel.ForEach method. Dies wird im Beispiel veranschaulicht.The example provides an illustration.

Konstrukte wie for und foreach (in C#) und For und For Each (in Visual Basic) werden sequenziell vom niedrigsten Index bis zum höchsten oder vom ersten-Objekt in einem-Objekt auf das letzte-Objekt ausgeführt.Constructs such as for and foreach (in C#) and For and For Each (in Visual Basic) execute sequentially from the lowest index to the highest or from the first object in a set to the last. Im Gegensatz dazu ist Parallel.For die Parallel.ForEach -Methode und die-Methode nicht.In contrast, the Parallel.For and Parallel.ForEach methods do not. Da einzelne Iterationen der-Schleife parallel ausgeführt werden, können Sie in beliebiger Reihenfolge starten und beenden.Because individual iterations of the loop run in parallel, they can begin and end in any order. Die ParallelLoopState -Klasse ermöglicht die Interaktion einzelner Iterationen paralleler Schleifen untereinander.The ParallelLoopState class allows individual iterations of parallel loops to interact with one another. Die ParallelLoopState -Klasse ermöglicht Folgendes:The ParallelLoopState class allows you to:

  • Beenden Sie die aktuelle Iteration, und verhindern Sie, dass zusätzliche Iterationen gestartet Stop werden, indem Sie die-Methode aufrufen.Exit the current iteration and prevent any additional iterations from starting by calling the Stop method. Dies hat keine Auswirkungen auf Iterationen, die bereits mit der Ausführung begonnen haben.This does not affect iterations that have already begun execution.

  • Verhindern Sie, dass Iterationen mit einem Index, der größer ist als der aktuelle Index Break , durch Aufrufen der-Methode ausgeführt wird.Prevent any iterations with an index greater than the current index from executing by calling the Break method. Dies hat keine Auswirkungen auf Iterationen, die bereits mit der Ausführung begonnen haben.This does not affect iterations that have already begun execution.

  • Bestimmen Sie, ob eine Ausnahme in Schleifen Iterationen aufgetreten ist, indem Sie den Wert der IsExceptional -Eigenschaft abrufen.Determine whether an exception has occurred in any loop iteration by retrieving the value of the IsExceptional property.

  • Bestimmen Sie, ob eine Iterations Schleife die- Stop Methode aufgerufen hat, indem Sie den Wert IsStopped der-Eigenschaft abrufen.Determine whether any iteration of the loop has called the Stop method by retrieving the value of the IsStopped property. Sie können diese Eigenschaft verwenden, um von Iterationen der Schleife zurückzukehren, die vor dem aufrufungs Stop Vorgang der-Methode gestartet wurde, aber noch ausgeführt wird.You can use this property to return from iterations of the loop that started before the call to the Stop method but are still executing.

  • Bestimmen Sie, ob eine Iterations Schleife die- Break oder Stop -Methode aufgerufen hat oder eine Ausnahme ausgelöst hat, indem Sie den Wert ShouldExitCurrentIteration der-Eigenschaft abrufen.Determine whether any iteration of the loop has called the Break or Stop method or has thrown an exception by retrieving the value of the ShouldExitCurrentIteration property.

  • Beenden Sie eine Iterationen mit langer Laufzeit, deren Index größer ist als der Index einer Iterationen, in der die Unterbrechung durch Abrufen des Werts der LowestBreakIteration -Eigenschaft aufgerufen wurde.Exit from a long-running iteration whose index is greater than the index of an iteration in which Break was called by retrieving the value of the LowestBreakIteration property.

Eigenschaften

IsExceptional IsExceptional IsExceptional IsExceptional

Ruft einen Wert ab, der angibt, ob eine Iteration der Schleife eine Ausnahme ausgelöst hat, die nicht durch diese Iteration behandelt wurde.Gets whether any iteration of the loop has thrown an exception that went unhandled by that iteration.

IsStopped IsStopped IsStopped IsStopped

Ruft einen Wert ab, der angibt, ob eine Iteration der Schleife die Stop()-Methode aufgerufen hat.Gets whether any iteration of the loop has called the Stop() method.

LowestBreakIteration LowestBreakIteration LowestBreakIteration LowestBreakIteration

Ruft die niedrigste Iteration der Schleife ab, von der Break() aufgerufen wurde.Gets the lowest iteration of the loop from which Break() was called.

ShouldExitCurrentIteration ShouldExitCurrentIteration ShouldExitCurrentIteration ShouldExitCurrentIteration

Ruft einen Wert ab, der angibt, ob die aktuelle Iteration der Schleife basierend auf Anforderungen dieser oder anderer Iterationen beendet werden soll.Gets whether the current iteration of the loop should exit based on requests made by this or other iterations.

Methoden

Break() Break() Break() Break()

Gibt an, dass die Parallel-Schleife die Ausführung von Iterationen nach der aktuellen Iteration beenden soll, sobald dies dem System möglich ist.Communicates that the Parallel loop should cease execution of iterations beyond the current iteration at the system's earliest convenience.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
Stop() Stop() Stop() Stop()

Gibt an, dass die Parallel-Schleife die Ausführung beenden soll, sobald es dem System möglich ist.Communicates that the Parallel loop should cease execution at the system's earliest convenience.

ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Gilt für:

Threadsicherheit

Eine ParallelLoopState -Instanz soll nur innerhalb des Texts der-Schleife verwendet werden, für die eine-Instanz bereitgestellt wurde.A ParallelLoopState instance is meant to be used only within the body of the loop to which an instance was provided. Es ist nicht sicher, eine angegebene ParallelLoopState -Instanz zu verwenden, nachdem die zugehörige Schleife beendet wurde, und es ist nicht sicher, Sie explizit an andere Threads zu übergeben, und diese Threads können jederzeit darauf zugreifen.It is not safe to use a provided ParallelLoopState instance after the associated loop ends, nor is it safe to explicitly hand it off to other threads and have those threads access it at any time. Jedem Thread ParallelLoopState , der an einer-Schleife beteiligt ist, wird eine andere-Instanz bereitgestellt.A different ParallelLoopState instance will be provided to each thread involved in a loop.

Siehe auch