using System; using System.Collections; using System.Collections.Generic; public class Test { public static void Main(string[] args) { foreach (var i in new DangerousEnumerable()) { Console.WriteLine(i); break; // consumer decides to abort } } } public class Resource : IDisposable { public Resource() { Console.WriteLine("Resource acquired!"); } public void Dispose() { Console.WriteLine("Resource disposed!"); } } public class DangerousEnumerable : IEnumerable { public IEnumerator GetEnumerator() { using (new Resource()) { yield return 1; yield return 2; } Console.WriteLine("Finished!"); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }