The yield break
pernyataan menyebabkan pencacahan berhenti. Akibatnya, yield break
menyelesaikan enumerasi tanpa mengembalikan item tambahan.
Pertimbangkan bahwa sebenarnya ada dua cara agar metode iterator dapat menghentikan iterasi. Dalam satu kasus, logika metode secara alami dapat keluar dari metode setelah mengembalikan semua item. Berikut ini sebuah contoh:
IEnumerable<uint> FindPrimes(uint startAt, uint maxCount)
{
for (var i = 0UL; i < maxCount; i++)
{
startAt = NextPrime(startAt);
yield return startAt;
}
Debug.WriteLine("All the primes were found.");
}
Dalam contoh di atas, metode iterator secara alami akan berhenti mengeksekusi setelah maxCount
bilangan prima ditemukan.
The yield break
Pernyataan adalah cara lain untuk iterator untuk berhenti pencacahan. Ini adalah cara untuk keluar dari pencacahan lebih awal. Berikut adalah metode yang sama seperti di atas. Kali ini, metode ini memiliki batasan jumlah waktu yang dapat dieksekusi oleh metode tersebut.
IEnumerable<uint> FindPrimes(uint startAt, uint maxCount, int maxMinutes)
{
var sw = System.Diagnostics.Stopwatch.StartNew();
for (var i = 0UL; i < maxCount; i++)
{
startAt = NextPrime(startAt);
yield return startAt;
if (sw.Elapsed.TotalMinutes > maxMinutes)
yield break;
}
Debug.WriteLine("All the primes were found.");
}
Perhatikan panggilan untuk yield break
. Akibatnya, ia keluar dari enumerasi awal.
Perhatikan juga bahwa yield break
kerjanya berbeda dari sekadar dataran break
. Pada contoh di atas, yield break
keluar dari metode tanpa membuat panggilan ke Debug.WriteLine(..)
.