O que acontece enquanto aguarda o resultado de uma tarefa?

Estou usando o HttpClient para postar dados em um serviço remoto em um projeto .NET 4.0. Eu não estou preocupado com este bloqueio de operação, então eu percebi que eu poderia pular ContinueWith ou async / await e usar o resultado.

Durante a depuração, me deparei com um problema em que o servidor remoto não respondia. Ao percorrer o código, pareceu que meu código parou de funcionar na terceira linha ... a linha do ponteiro da pilha atual parou de ficar destacada em amarelo e não avançou para a próxima linha. Apenas desapareceu. Demorei um pouco para perceber que deveria aguardar o tempo limite da solicitação.

var client = new HttpClient();
var task = client.PostAsync("http://someservice/", someContent);
var response = task.Result;

Meu entendimento era que chamar Result on the Task fazia com que o código fosse executado de forma síncrona, para se comportar mais assim (eu sei que não há um método Post no HttpClient):

var client = new HttpClient();
var response = client.Post("http://someservice/", someContent);

Eu não tenho certeza se isso é uma coisa ruim, estou apenas tentando entender isso. É realmente verdade que, em virtude do fato de que o HttpClient está retornando tarefas em vez dos resultados diretamente, meu aplicativo está automaticamente aproveitando a assincronia mesmo quando eu acho que estou evitando isso?

questionAnswers(2)

yourAnswerToTheQuestion