using System.Threading.Tasks;
public static void Main()
Console.WriteLine(test.TestAsync(true).Result);
Console.WriteLine(Await(async t => await t.TestAsync(false)).Result);
public static Task<bool> Await(Func<Test, Task<bool>> function)
public Task<bool> TestAsync(bool initial)
var tcs = new TaskCompletionSource<bool>();
var client = new AsyncTest();
EventHandler<bool> handler = null;
handler = (sender, result) =>
client.Completed -= handler;
tcs.SetException(new Exception("This should have flipped"));
tcs.TrySetResult(result);
client.Completed += handler;
client.TestAsync(initial);
public event EventHandler<bool> Completed;
public void TestAsync(bool initial)