Я следующий кодразница между HttpClient.GetStringAsync и WebClient.DownloadStringAsync
static void Main(string[] args)
{
string url = "http://www.google.com";
Console.WriteLine(GetUrl(url).Result); // throws TaskCanceledException
Console.WriteLine(GetUrl2(url).Result);
}
public static Task<string> GetUrl(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}
public static Task<string> GetUrl2(string url)
{
using (var client = new WebClient())
{
return client.DownloadStringTaskAsync(url);
}
}
Я пытаюсь получить строку с URL, проблема метода GetURL (использует HttpClient-х GetStringAsync) бросает TaskCacelledException, но метод GetUrl2 (использует WebClient DownloadStringTaskAsync) работает правильно. Это вызвано using statement
? Что мне не хватает?
Редактировать. В этом примере я вызываю Result для задачи, потому что это консольное приложение, я знаю, что лучше всего ожидать результата в обработчике событий, например.
Так что я не могу рассчитывать на «правильность» примера WebClient? – enrique7mc
@chais: Я бы не стал. Просто используйте 'await', а затем вы * знаете *, он будет работать правильно. –