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.