using System.Collections.Generic;
public static void Main()
var connectionProvider = new ConnectionProvider();
var operation = new Operation();
var items = connectionProvider.WithConnection(c => operation.ReadDataUsingEnumerable(c));
public IEnumerable<string> ReadDataUsingEnumerable(Connection connection)
Console.WriteLine("Start enumerating");
for (var i = 0; i < 10; i++)
yield return "String: " + i;
Console.WriteLine("Finish enumerating");
public class ConnectionProvider
public T WithConnection<T>(Func<Connection, T> action)
using var connection = new Connection();
return action(connection);
public class Connection : IDisposable
Console.WriteLine("Create connection");
Console.WriteLine("Dispose connection");