using System; using System.Threading.Tasks; class AsyncTypeInference { public static int Main () { Test (async l => await Task.Factory.StartNew (() => 1)); Test (async l => { return await Task.Factory.StartNew (() => 1); }); Test2 (async l => { await TT (); } ); Test2 (async l => { TT (); } ); return 0; } static Task TT () { return Task.Factory.StartNew (() => 2); } static void Test (Func> arg) { arg (0); } static void Test2 (Func arg) { arg (0); } }