Tôi đang cố bắt đầu tác vụ không đồng bộ (trên .NET 4.5) tải xuống nội dung của trang web, nhưng bằng cách nào đó tác vụ này không bao giờ kết thúc.Tác vụ không đồng bộ không kết thúc
Lớp học của tôi 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();
}
}
}
tôi bắt đầu trang tải bằng cách gọi
new PageDownloader().GetPageData(url);
Khi tôi đang cố gắng để gỡ lỗi mã, mọi thứ đều tốt cho đến GetResponse().Wait()
. Nhưng bằng cách nào đó, nhiệm vụ GetResponse()
không bao giờ kết thúc - điểm ngắt trên dòng tiếp theo không bao giờ đạt được. Tôi không nhận được ngoại lệ, ứng dụng tiếp tục chạy. Bất kỳ đề xuất?
Cảm ơn câu trả lời hay. Bạn cũng có thể giải thích làm cách nào để xử lý phản hồi trong mã gọi điện? –
@YuriyPogrebnyak Tôi đang trong quá trình chỉnh sửa. – Servy