using System.Threading.Tasks;
public static async Task<string> AnalyzeType(Type type)
return "This is the analysis of " + type.Name;
public static async Task<string> AnalyzeAssembly(Assembly asm)
StringBuilder builder = new StringBuilder();
var types = asm.GetTypes().OrderBy( type => type.Name );
var tasks = types.ToDictionary(k => k, v => AnalyzeType(v));
await Task.WhenAll(tasks.Select( kvp => kvp.Value));
var results = tasks.ToDictionary(k => k.Key, v => v.Value.GetAwaiter().GetResult() );
Console.WriteLine(results.GetType().FullName);
var output = results.OrderBy(kvp => kvp.Key.Name).Select(kvp => kvp.Value);
var text = string.Join("\r\n", output);
return builder.ToString();
public static async Task MainAsync()
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var s = await AnalyzeAssembly(assembly);
public static void Main()
MainAsync().GetAwaiter().GetResult();