Try...finally C# with Example
If an iterator method has a yield inside a try...finally, then the returned IEnumerator will execute the finally statement when Dispose is called on it, as long as the current point of evaluation is inside the try block. Given the function: private IEnumerable Numbers() { yield return 1; try { yield return 2; yield return 3; } finally { Console.WriteLine("Finally executed"); } } When calling: private void DisposeOutsideTry() { var enumerator = Numbers().GetEnumerator(); enumerator.MoveNext(); Console.WriteLine(enumerator.Current); enumerator.Dispose(); } Then it prints: 1 View Demo When calling: private void DisposeInsideTry() { var enumerator = Numbers().GetEnumerator(); enumerator.MoveNext(); Console.WriteLine(enumerator.Current); enumerator.MoveNext(); Console.WriteLine(enumerator.Current); enumerator.Dispose(); } Then it prints: 1 2 Finally executed View Demo