Пытаюсь получить ответ от сайта без блокировки UI:
async Task<string> HttpGetOnlineAsync(string params)
{
try
{
HttpClient hc = new HttpClient();
Task<Stream> result = hc.GetStreamAsync(URL + params);
Stream stream = await result;
StreamReader reader = new StreamReader(stream);
return await reader.ReadToEndAsync();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return null;
}
}
И делее вызываю метод:
var o = JObject.Parse(await HttpGetOnlineAsync(params));
На строке:
Stream stream = await result;
Вылезает ошибка и перекидывает в дизассемблированный код.
Вот так все работает но фризит. Мне нужно сделать:
var resp = request.GetResponse();
async так как фризится UI:
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
var resp = request.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
return await reader.ReadToEndAsync();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return null;
}
Да хоть все в using оберни:
async Task<string> HttpGetOnlineAsync(string twitchname)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.twitch.tv/kraken/streams/" + twitchname + ClientID);
{
using (var resp = await request.GetResponseAsync())
{
using (Stream stream = resp.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
return await reader.ReadToEndAsync();
}
}
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return null;
}
}
Все равно с ошибкой.
var resp = await request.GetResponseAsync()
Как будто код выполняется не дожидаясь await.
GetStringAsync? – Grundy Nov 14 '18 at 15:34HttpGetOnlineAsync(string params)– Grundy Nov 14 '18 at 15:37string paramsдействительно не компилируется. Покажите компилирующйися код. В примере сWebRequestиспользуетсяURL, в примере сHttpClientиспользуетсяURL + params. Ну и так по мелочи:HttpClient,Stream,StreamReader- всё это нужно диспозить (используйтеusing). – Alexander Petrov Nov 14 '18 at 16:50