L' yield breakinstruction arrête l'énumération. En effet, yield breaktermine l'énumération sans retourner aucun élément supplémentaire.
Considérez qu'il existe en fait deux façons dont une méthode d'itérateur peut arrêter l'itération. Dans un cas, la logique de la méthode pourrait naturellement quitter la méthode après avoir renvoyé tous les éléments. Voici un exemple:
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.");
}
Dans l'exemple ci-dessus, la méthode itérateur arrêtera naturellement de s'exécuter une fois que les maxCountnombres premiers auront été trouvés.
L' yield breakinstruction est une autre façon pour l'itérateur de cesser d'énumérer. C'est un moyen de sortir tôt du dénombrement. Voici la même méthode que ci-dessus. Cette fois, la méthode a une limite sur la durée d'exécution de la méthode.
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.");
}
Remarquez l'appel à yield break. En effet, il quitte précocement l'énumération.
Remarquez également que les yield breaktravaux diffèrent d'une simple plaine break. Dans l'exemple ci-dessus, yield breakquitte la méthode sans appeler Debug.WriteLine(..).