Le débogueur s'arrête après async HttpClient.GetAsync() appel dans visual studio

Je suis en train de tester la follwing la méthode de requête http

public async Task<HttpContent> Get(string url)
    {
        using (HttpClient client = new HttpClient())
//breakpoint
        using (HttpResponseMessage response = await client.GetAsync(url))
//can't reach anything below this point
        using (HttpContent content = response.Content)
        {
            return content;
        }
    }

Cependant, le débogueur semble être à sauter le code ci-dessous la 2ème commentaire. Je suis à l'aide de Visual studio 2015 RC, des idées? J'ai aussi essayé de vérifier les Tâches de la fenêtre et j'ai vu rien

Edit: Trouvé la solution

using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace ConsoleTests
{
class Program
{
static void Main(string[] args)
{
Program program = new Program();
var content = program.Get(@"http://www.google.com");
Console.WriteLine("Program finished");
}
public async Task<HttpContent> Get(string url)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url).ConfigureAwait(false))
using (HttpContent content = response.Content)
{
return content;
}
}
}
}

S'avère que parce que c'était un C# console application, elle s'est terminée après le thread principal se termine, je suppose, parce que, après l'ajout d'une Console.ReadLine() et en attendant un peu, la demande n'a de retour. J'ai deviné que C# attendre jusqu'à ce que ma tâche à exécuter et à pas fin avant elle, mais je suppose que je me trompais. Si quelqu'un pourrait expliquer pourquoi de ce qui s'est passé ce serait sympa.

  • C'est parce que vous avez une autre méthode async client.GetAsync(url). Vous devez ajouter un point d'arrêt à l'intérieur de cette méthode trop.
  • Je me dois d'ajouter le point d'arrêt où exactement? J'ai essayé d'ajouter des points d'arrêt sur chaque ligne, même sur le seul appel de ma méthode Get attendent, mais le débogueur encore ignore rien au-delà de mon deuxième GetAsync appel.
  • Je crois que cette question est un doublon. Toutefois, si cela est incorrect, alors laissez-moi savoir et je vais rouvrir.
  • J'ai vu cette question, mais quand j'ai vu ASP.NET dans la réponse que j'ai deviné cela ne s'applique pas à ma question, puisque je suis en train de faire cela sur une application console C#. Je vais vérifier pour l'instant, mais si la question vous l'avez souligné ne s'applique pas à une console C# app s'il vous plaît laissez-moi savoir que bien.
  • Cette réponse s'applique à ASP.NET et les applications d'INTERFACE utilisateur, mais pas de la Console apps. Quelques questions: 1) Êtes-vous sûr que le débogueur n'est jamais arrivé sur le return content ligne (c'est à dire, si vous mettez un point d'arrêt il y a, elle n'est jamais atteint)? 2) Êtes-vous le blocage sur le code asynchrone, donc il a une chance de finir avant Main sorties (et donc le programme des sorties)? 3) Si la réponse à (1) et (2) sont Oui, vous pouvez poster un minimum, reproductible exemple?
  • Oui, j'ai mis un point d'arrêt sur chaque ligne de code et il ne revient jamais. Vous ne savez pas le numéro de la question 2, mais mon ensemble de l'application est seulement de cette méthode et un appel du genre: Programme p = nouveau programme(); p.Get();
  • travailler sur votre question #3
  • Semble que votre application n'est tout simplement pas attendre avant de sortir. Vous devez arrêter de Main de sortie. Comme faire un p.Get().Wait(); ou un p.Get(); Console.ReadKey();.
  • Ouais, en fait, je viens de comprendre que tant que vous a écrit et mis à jour ma question avec la solution. Désolé pour l'erreur de débutant. Un blog j'ai pu vérifier pour savoir pourquoi mon application n'est pas en attente de ma tâche pour finir même avec l'attendent? J'ai essayé d'ajouter l'attendent pour le programme.Get() mais il me demande de faire la principale méthode async (qui je suppose n'est pas la bonne façon)

InformationsquelleAutor sgarcia.dev | 2015-07-07