To start an async method from Main, do something like static int Main ( ) { return DoAsyncWork().GetAwaiter().GetResult(); } As of C# 7.1, can you also write static async Task< int > Main ( ) { // This could also be replaced with the body // DoAsyncWork, including its await expressions: return await DoAsyncWork(); } or the following if Main returns void static async Task Main ( ) { await SomeAsyncMethod(); }