I read many articles on async and await(mostly from msdn - which is good actually). There is still one question that bothers me and I could not find the answer. If there is an await statement on a task then the control is returned to its caller until it is awaited again in the caller. In that case is this time consuming task getting executed in a separate thread? If not then how is it getting executed parallel to the main thread. async Task<string> GetContentsAsync() { int sample = 0; HttpClient client = new HttpClient(); Task<string> contents = client.GetStringAsync("http://www.microsoft.com"); string data = await contents; return data; } I hope my question is clear.