Why wait not wait?

This is my actual code:

    async Task getData()
    {
        Thread.Sleep(5000);
        Console.WriteLine("Step 1");

        using (HttpClient api = new HttpClient()) 
            await api.GetAsync("http://google.com/").ContinueWith(
                (getTask) =>
                    Console.WriteLine(getTask.Result.StatusCode);
            );

        Console.WriteLine("Step 2");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Task<Task> task = new Task<Task>(getData);
        task.Start();
        task.Wait();
        Console.WriteLine("Step 3");
    }

I get the following output:

Step 1
Step 3
OK
Step 2

Why Step 3doesn't it come after Step 2?

How can I make it work sequentially, i.e. return to the caller getDataonly until everything is done in getData?

+4
source share
2 answers

You should also mark the event handler as async

private async Task button1_Click(object sender, EventArgs e)

and awaitinstead of Wait:

private async Task button1_Click(object sender, EventArgs e)
{
    await getData();

    Console.WriteLine("Step 3");
}

async/await, , . , Wait Result, . , , . , async/await, , , , .

+4

- async Task ( <T>) Task, .

, async Task ( , , factory, Task.Run), , , Task . , ( ) Task, Task s.

, , async ( , async, async) Task .

+2

Source: https://habr.com/ru/post/1682461/


All Articles