ParallelLoopState Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Memungkinkan iterasi perulangan paralel untuk berinteraksi dengan iterasi lain. Instans kelas ini disediakan oleh Parallel kelas untuk setiap perulangan; Anda tidak dapat membuat instans dalam kode Anda.
public ref class ParallelLoopState
public class ParallelLoopState
type ParallelLoopState = class
Public Class ParallelLoopState
- Warisan
-
ParallelLoopState
Contoh
Contoh berikut menjalankan hingga 100 iterasi perulangan secara paralel. Setiap perulangan dijeda untuk interval acak dari 1 hingga 1.000 milidetik. Nilai yang dihasilkan secara acak menentukan di mana iterasi perulangan metode dipanggil Break . Seperti yang ditunjukkan oleh output dari contoh, tidak ada iterasi yang indeksnya lebih besar dari LowestBreakIteration nilai properti dimulai setelah panggilan ke Break metode .
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
Karena iterasi perulangan masih cenderung dijalankan ketika Break metode dipanggil, setiap perulangan memanggil ShouldExitCurrentIteration properti untuk memeriksa apakah iterasi lain telah memanggil Break metode . Jika nilai properti adalah true, iterasi memeriksa nilai LowestBreakIteration properti dan, jika lebih besar dari nilai indeks iterasi saat ini, segera ditampilkan.
Keterangan
Perhatikan bahwa Anda tidak dapat membuat instans kelas ini. Ini secara otomatis dihasilkan oleh pengkompilasi sebagai argumen dalam panggilan ke Parallel.For metode atau Parallel.ForEach . Contoh memberikan ilustrasi.
Konstruksi seperti for dan foreach (dalam C#) dan dan ForFor Each (di Visual Basic) dijalankan secara berurutan dari indeks terendah ke tertinggi atau dari objek pertama dalam satu set ke yang terakhir. Sebaliknya, Parallel.For metode dan Parallel.ForEach tidak. Karena perulangan individu dari perulangan berjalan secara paralel, mereka dapat dimulai dan berakhir dalam urutan apa pun. Kelas ini ParallelLoopState memungkinkan perulangan individu dari perulangan paralel untuk berinteraksi satu sama lain. Kelas ini ParallelLoopState memungkinkan Anda untuk:
Keluar dari iterasi saat ini dan mencegah perulangan tambahan dimulai dengan memanggil Stop metode . Ini tidak memengaruhi iterasi yang telah dimulai eksekusi.
Cegah perulangan apa pun dengan indeks yang lebih besar dari indeks saat ini agar tidak dijalankan dengan memanggil Break metode . Ini tidak memengaruhi iterasi yang telah dimulai eksekusi.
Tentukan apakah pengecualian telah terjadi dalam perulangan perulangan apa pun dengan mengambil nilai IsExceptional properti.
Tentukan apakah perulangan dari perulangan telah memanggil Stop metode dengan mengambil nilai IsStopped properti. Anda dapat menggunakan properti ini untuk mengembalikan dari iterasi perulangan yang dimulai sebelum panggilan ke Stop metode tetapi masih dijalankan.
Tentukan apakah perulangan dari perulangan telah memanggil Break metode atau Stop atau telah melemparkan pengecualian dengan mengambil nilai ShouldExitCurrentIteration properti.
Keluar dari iterasi jangka panjang yang indeksnya lebih besar dari indeks iterasi di mana Break dipanggil dengan mengambil nilai LowestBreakIteration properti.
Properti
| Nama | Deskripsi |
|---|---|
| IsExceptional |
Mendapatkan apakah perulangan perulangan telah melemparkan pengecualian yang tidak tertangani oleh iterasi tersebut. |
| IsStopped |
Mendapatkan apakah perulangan dari perulangan telah memanggil Stop() metode . |
| LowestBreakIteration |
Mendapatkan iterasi terendah dari perulangan yang Break() dipanggil. |
| ShouldExitCurrentIteration |
Mendapatkan apakah iterasi perulangan saat ini harus keluar berdasarkan permintaan yang dibuat oleh perulangan ini atau lainnya. |
Metode
| Nama | Deskripsi |
|---|---|
| Break() |
Berkomunikasi bahwa perulangan Parallel harus menghentikan eksekusi iterasi di luar iterasi saat ini pada kenyamanan paling awal sistem. |
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| Stop() |
Berkomunikasi bahwa perulangan Parallel harus menghentikan eksekusi pada kenyamanan paling awal sistem. |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
Berlaku untuk
Keamanan Thread
ParallelLoopState Instans dimaksudkan untuk digunakan hanya dalam isi perulangan tempat instans disediakan. Tidak aman untuk menggunakan instans yang disediakan ParallelLoopState setelah perulangan terkait berakhir, juga tidak aman untuk secara eksplisit menyerahkannya ke utas lain dan meminta utas tersebut mengaksesnya kapan saja. Instans yang berbeda ParallelLoopState akan disediakan untuk setiap utas yang terlibat dalam perulangan.