using System; using System.Threading.Tasks; class A { public Task GetValue (int b) { return Task.FromResult (b); } } class C { public static int Main () { var c = new C (); return c.Foo ().Result; } public A Instance { get { return new A (); } } async Task Foo () { int value = 1; { int b = 3; await Test (value, async () => { await Instance.GetValue (b); }); } return 0; } T Test (int arg, Func func) { return func (); } }