using System.Threading.Tasks;
public static async Task Main()
Console.WriteLine("Sync");
var syncFunc = MyAlgorithm.DoAlgorithm<string, string>(s => "Hello, " + s );
syncFunc(["Matt", "Lilly"]).Dump();
Console.WriteLine("ASync");
var asyncFunc = MyAlgorithm.DoAlgorithm<string, Task<string>>(s => Task.FromResult("Hello, " + s) );
var results = await Task.WhenAll(asyncFunc(["Matt", "Lilly"]));
public static class MyAlgorithm
public static Func<TInput[], TOutput[]> DoAlgorithm<TInput, TOutput>( Func<TInput, TOutput> stepFunc )
return input.Select(i => stepFunc(i)).ToArray();