Question: I copied below code from [this](http://blogs.msdn.com/b/csharpfaq/archive/2012/06/26/understanding-a-simple-async-program.aspx) link.But when I am compiling this code I am getting an **entry point cannot be marked with the 'async' modifier**. How can I make this code compilable?

```
class Program
{
    static async void Main(string[] args)
    {
        Task<string> getWebPageTask = GetWebPageAsync("http://msdn.microsoft.com");

        Debug.WriteLine("In startButton_Click before await");
        string webText = await getWebPageTask;
        Debug.WriteLine("Characters received: " + webText.Length.ToString()); 
    }

    private static async Task<string> GetWebPageAsync(string url)
    {
        // Start an async task. 
        Task<string> getStringTask = (new HttpClient()).GetStringAsync(url);

        // Await the task. This is what happens: 
        // 1. Execution immediately returns to the calling method, returning a 
        //    different task from the task created in the previous statement. 
        //    Execution in this method is suspended. 
        // 2. When the task created in the previous statement completes, the 
        //    result from the GetStringAsync method is produced by the Await 
        //    statement, and execution continues within this method. 
        Debug.WriteLine("In GetWebPageAsync before await");
        string webText = await getStringTask;
        Debug.WriteLine("In GetWebPageAsync after await");

        return webText;
    }

    // Output: 
    //   In GetWebPageAsync before await 
    //   In startButton_Click before await 
    //   In GetWebPageAsync after await 
    //   Characters received: 44306
}

```

Answer: 
The error message is exactly right: the `Main()` method cannot be `async`, because when `Main()` returns, the application usually ends.

If you want to make a console application that uses `async`, a simple solution is to create an `async` version of `Main()` and synchronously `Wait()` on that from the real `Main()`:

```
static void Main()
{
    MainAsync().Wait();
}

static async Task MainAsync()
{
    // your async code here
}

```

This is one of the rare cases where mixing `await` and `Wait()` is a good idea, you shouldn't usually do that.

**Update**: [Async Main](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/async-main.md) is [supported in C# 7.1](https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md#c-71---visual-studio-2017-version-153).
Wrap your async code in `MainAsync()` - which is an async function  

then call `MainAsync().GetAwaiter().GetResult();`