Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

888
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!