using System.Threading.Tasks; using System; class X { static void Main () { var x = new X (); x.Run ().Wait (); } Task AnimateAsync (Action callback) { callback (); return Task.FromResult (2); } void SecondLevel (Action callback) { callback (); } async Task Run () { var ret = await AnimateAsync (() => { SecondLevel (() => { Console.WriteLine (this); }); }); } }