L' yield break
instruction arrête l'énumération. En effet, yield break
termine 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 maxCount
nombres premiers auront été trouvés.
L' yield break
instruction 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 break
travaux diffèrent d'une simple plaine break
. Dans l'exemple ci-dessus, yield break
quitte la méthode sans appeler Debug.WriteLine(..)
.