Sto tentando di avviare un'attività asincrona (su .NET 4.5) che scarica il contenuto della pagina Web, ma in qualche modo questa attività non termina mai.L'attività asincrona non termina
La mia classe PageDownloader
:
using System.Net;
using System.Text;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System;
namespace ParserConsole.WebClient
{
public class PageDownloader
{
private System.Net.Http.HttpClient _client;
public PageDownloader()
: this(Encoding.UTF8) { }
private Encoding _encoding;
public PageDownloader(Encoding encoding)
{
_encoding = encoding;
_client = new HttpClient() { Timeout = TimeSpan.FromSeconds(10)};
}
private HttpRequestMessage _request;
private HttpResponseMessage _response;
private string _responseString;
public string GetPageData(string link)
{
_request = new HttpRequestMessage(HttpMethod.Get, link);
_request.Headers.Add("User-Agent", "Chrome/21.0.1180.89");
_request.Headers.Add("Accept", "text/html");
GetResponse().Wait();
GetStringFromResponse().Wait();
return _responseString;
}
private async Task<HttpResponseMessage> GetResponse() {
return _response = await _client.GetAsync(_request.RequestUri);
}
private async Task<string> GetStringFromResponse() {
return _responseString = await _response.Content.ReadAsStringAsync();
}
}
}
inizio a pagina scaricando chiamando
new PageDownloader().GetPageData(url);
Quando sto cercando di eseguire il debug del codice, tutto è bene fino GetResponse().Wait()
. Ma in qualche modo l'attività GetResponse()
non termina mai: il punto di interruzione nella riga successiva non viene mai raggiunto. Non ottengo eccezioni, l'applicazione continua a funzionare. Eventuali suggerimenti?
Grazie per la buona risposta. Puoi anche spiegare come devo gestire la risposta nel codice chiamante? –
@YuriyPogrebnyak Ero già in fase di modifica. – Servy