How and when to use ‘async’ and ‘await’

From my understanding one of the main things that async and await do is to make code easy to write and read – but is using them equal to spawning background threads to perform long duration logic?

I’m currently trying out the most basic example. I’ve added some comments inline. Can you clarify it for me?

// I don't understand why this method must be marked as `async`.
private async void button1_Click(object sender, EventArgs e)
    Task<int> access = DoSomethingAsync();
    // task independent stuff here

    // this line is reached after the 5 seconds sleep from 
    // DoSomethingAsync() method. Shouldn't it be reached immediately? 
    int a = 1; 

    // from my understanding the waiting should be done here.
    int x = await access; 

async Task<int> DoSomethingAsync()
    // is this executed on a background thread?
    return 1;


Leave a Comment