Ce qui se passe lors de l'attente sur une Tâche de Résultat?

Je suis en utilisant le HttpClient pour publier des données à un service distant dans un .NET 4.0 projet. Je ne suis pas concerné par cette opération de blocage, alors j'ai pensé que je ne pouvais l'ignorer ContinueWith ou async/await et l'utilisation de Résultat.

Pendant le débogage, j'ai couru dans un problème où le serveur distant n'était pas sensible. Comme je passais à travers le code, il semblait que mon code est juste arrêté en cours d'exécution sur la troisième ligne... le pointeur de pile actuel de la ligne a cessé d'être surligné en jaune, et n'ont pas de passer à la ligne suivante. Il a tout simplement disparu. Il m'a fallu un certain temps pour réaliser que je devrais attendre la demande de délai d'attente.

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

Ma compréhension était que l'appel de Résultat sur la Tâche causé le code à exécuter de manière synchrone, à se comporter plus comme ça (je sais il n'y a pas de méthode Post dans la HttpClient):

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

Je ne suis pas sûr que ce soit une mauvaise chose, je suis juste essayer d'obtenir ma tête autour de lui. Est-il vrai que, en vertu du fait que la HttpClient est de retour Tâches au lieu de directement les résultats, ma demande est automatiquement profitant de l'asynchronie même quand je pense que je vais l'éviter?

  • la doc dit: "L'accesseur get pour cette propriété garantit que l'opération asynchrone est terminée avant de revenir." de sorte que vous serait correct en supposant que. Cependant, peut-être que vous exécutez dans le cas où la Tâche déclenche une exception parce que l'opération a échoué.
  • Je suppose que ce que m'a jeté a été que le pointeur de pile disparu. Je ne savais pas que si j'ai attendu assez longtemps, le blocage de Suite appel exception. Il a juste regardé comme si le code de l'arrêté d'exécution de la moitié du chemin par le biais de la méthode. Peut-être cela devrait être une VS Connectez type de question de demander de l'INTERFACE utilisateur de repère qu'il y est une opération asynchrone en attente sur la troisième ligne. Je pense que le débogueur même m'a ramené à l'appel de la classe.
  • toute solution finale avec l'intégralité du code source?
InformationsquelleAutor scottt732 | 2012-09-18