@kosyak_47

Почему игнорируется объемный фрагмент кода после выполнения httpClient.GetStreamAsync()?

Добрый день. Практически написал весь код для добавления товара в группу Вконтакте по средствам API и столкнулся с новой проблемой. Есть у меня в коде фрагмент, который отвечает за загрузку изображения по прямой ссылке:

...
HttpClient httpClient = new HttpClient();

Stream stream = await httpClient.GetStreamAsync(dataExcelTabel[i].photo2);
FileStream file = File.OpenWrite(PathForSavePhotos + "/" + dataExcelTabel[i].codeProduct + "." + splitFileName[splitFileName.Length - 1]);

dataExcelTabel[i].pathPhotoSave = file.Name;

await stream.CopyToAsync(file);

//Закрываем потоки
stream.Close();
file.Close();
...


В общем, при выполнении строки
Stream stream = await httpClient.GetStreamAsync(dataExcelTabel[i].photo2);
компилятор просто игнорирует огромный фрагмент кода и перескакивает на следующий метод, не выполнив текущий. Даже в пошаговом режиме пролетает. Что у меня не хватает? Подскажите пожалуйста
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 2
gdt
@gdt
Программист
Я бы рекомендовал для начала завернуть ваш кусок кода в try/catch (Exception e), поставить брейкпоинт на следующей строчке после проблемного метода, и в теле catch. Либо там либо там должно сработать, так вы сузите круг подозреваемых :)
Ответ написан
Комментировать
в коде происходит полный выход из метода UploadPhotos(), хотя у меня там еще приличная часть кода должна исполниться. Прыжок происходит как в пошаговом так и в обычном режиме.

1. Это особенность async-await. Перескакивание при отладке - это норма.
2. Не используй async void
3. Попробуй завернуть всё внутри метода с await-ами в try-catch, чтобы убедиться, что выход происходит не из-за исключений. Заодно выводи в консоль сообщения об ошибках.
4.
File.OpenWrite(PathForSavePhotos + "/" + dataExcelTabel[i].codeProduct + "." + splitFileName[splitFileName.Length - 1]);

Выглядит очень подозрительно. На самом деле может падать из-за кривых разделителей пути. Используй Path.Combine
5. Вместо .Close(); используй using

PS: не надо дублировать вопросы
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы