Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

896
Vistas
El depurador se detiene después de la llamada asincrónica HttpClient.GetAsync() en Visual Studio

Estoy tratando de probar el siguiente método de solicitud 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; } }

Sin embargo, el depurador parece estar omitiendo el código debajo del segundo comentario. Estoy usando Visual Studio 2015 RC, ¿alguna idea? También intenté revisar la ventana Tareas y no vi nada.

Edito: encontré la solución

 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; } } } }

Resulta que debido a que esta era una aplicación de consola C#, terminó después de que finaliza el hilo principal, supongo, porque después de agregar Console.ReadLine() y esperar un poco, la solicitud regresó. Supuse que C# esperaría hasta que mi tarea se ejecutara y no terminaría antes, pero supongo que estaba equivocado. Si alguien pudiera explicar por qué sucedió esto, sería bueno.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Cuando Main sale, el programa sale. Cualquier operación asíncrona pendiente se cancela y sus resultados se descartan.

Por lo tanto, debe bloquear la salida de Main , ya sea bloqueando la operación asincrónica o algún otro método (por ejemplo, llamando a Console.ReadKey para bloquear hasta que el usuario presione una tecla):

 static void Main(string[] args) { Program program = new Program(); var content = program.Get(@"http://www.google.com").Wait(); Console.WriteLine("Program finished"); }

Un enfoque común es definir un MainAsync que también maneje excepciones:

 static void Main(string[] args) { MainAsync().Wait(); } static async Task MainAsync() { try { Program program = new Program(); var content = await program.Get(@"http://www.google.com"); Console.WriteLine("Program finished"); } catch (Exception ex) { Console.WriteLine(ex); } }

Tenga en cuenta que el bloqueo en código asíncrono generalmente se considera una mala idea; hay muy pocos casos en los que debería hacerse, y el método Main de una aplicación de consola resulta ser uno de ellos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda