@llexus

Почему падает приложение при втором вызове DownloadStringTaskAsync?

Всем привет. Приложение улетает в UnhandledException при втором вызове данной функции.
public static class Locator
    {
        public static async Task<List<Location>> GetCitiesAsync(string token = "", int max = 5)
        {
            WebClient wc = new WebClient();
            string resultContent = await wc.DownloadStringTaskAsync(new Uri(string.Format("http://www.site.ru/ajax/geo.cshtml?_=r&context=&token={0}&max_matches={1}&use_similar=0", HttpUtility.UrlEncode(token), max.ToString())));
            // parse ...

            Locations ll = JsonConvert.DeserializeObject<Locations>(resultContent);

            return (from l in ll.locations select l).Take(max).ToList();
        }
    }


Вызываю так
async void LocationsFunc(string search)
        {
            if (IsLoading)
                return;

            IsLoading = true;
            List<Location> locs = await Locator.GetCitiesAsync(search);
            IsLoading = false;
}


A first chance exception of type 'System.Exception' occurred in System.Windows.dll
A first chance exception of type 'MS.Internal.WrappedException' occurred in System.Windows.dll
A first chance exception of type 'MS.Internal.WrappedException' occurred in System.Windows.dll
A first chance exception of type 'MS.Internal.WrappedException' occurred in System.Windows.dll


try/catch не помогает, где бы не находился.
Ума не приложу, в чем же дело? Какая ему разница? Ведь создается новый инстанс WebClientа
В callback/event стиле написания все работает.
  • Вопрос задан
  • 2401 просмотр
Пригласить эксперта
Ответы на вопрос 2
@mayorovp
И даже вот так не получается?
if (IsLoading)
            return;
try {
            IsLoading = true;
            List<Location> locs = await Locator.GetCitiesAsync(search);
} catch (Exception ex) {
            Debug.Break();
            // тут бы MessageBox какой-нибудь или записать в лог
} finally {
            IsLoading = false;
}
Ответ написан
Комментировать
@llexus Автор вопроса
Очень странно, но сейчас код из моего стартового поста заработал.. вчера я пофиксил его заменой строчки
List locs = await Locator.GetCitiesAsync(search);
на
foreach (Location loc in await Locator.GetCitiesAsync(search))
...
и все заработало. Видимо вся суть была к привязке Taskа к какой-либо локальной переменной. try/catch'ами оборачивал все и вся, но ничего не ловилось, а просто падало.. Эмулятор перезапускать не пробовал, может дело где то в глубинах системы было..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы