Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2017, 05:59   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Проблема с потокоаой обработкой

Здравствуйтте.
Сегодня я стал свидетелем одной забавной ситуации ...
Что у меня есть:
1) Selenium, ChromeDriver, да опять;
2) необходимость загрузить страницу в драйвере;
3) проблема - если непосредственно в процессе загрузки пропадает связь с интернетом, то драйвер уходит в вечную загрузку, и не происходит выхода из свойства/функции Url;
4) решение проблемы - завернуть загрузку страницы в поток, и ждать результата/таймаута.

Пока вроде всё нормально ... До тех пор, пока не выйдет установленный мною таймаут.
По завершению цикла опроса состояний я вызывал Abort() потоку загрузки, и из этого аборта не выпадало никаких исключений.
Если цикл завершился таймаутом, и драйвер повесился - после появления интернета я получаю живой поток загрузки, и это после "успешного" аборта. Такое мне показала трассировка функции потока.
Проблема быстро решилась передачей состояния "ты уже не нужен" через объект, который изначально передавался в поток.

А теперь вопросы:
1) почему поток выжил ?
2) имеет ли смысл вызывать аборт при таких обстоятельствах ?
3) опасно ли для данных вызывать аборт в такой ситуации ?
4) как правильнее сообщить драйверу, что "у нас проблема" ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 18.02.2017 в 15:39.
OmegaBerkut вне форума Ответить с цитированием
Старый 18.02.2017, 10:38   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
если непосредственно в процессе загрузки пропадает связь с интернетом, то драйвер уходит в вечную загрузку, и не происходит выхода из свойства/функции Url;
Там можно Timeout поставить, может поможет.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.02.2017, 15:26   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Там можно Timeout поставить, может поможет
Искал, и не обнаружил. Если бы что то нашёл - свой таймаут сооружать не стал бы.
Так же не обнаружил возможности остановить загрузку (что то типа .Navigate().Break() ).
Из-за второго кстати я получаю асинхрон программы и драйвера (это по части моего 4-го вопроса), что без брейка решается только перезапуском драйвера.

upd: залез ещё вот сюда: driver.Navigate().GoToUrl()
Тут тоже нет ни намёка на таймауты.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 18.02.2017 в 15:42.
OmegaBerkut вне форума Ответить с цитированием
Старый 18.02.2017, 15:40   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
webDriver.Manage().Timeouts().
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.02.2017, 15:55   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Alex11223, это уже конечно лучше, но мой таймаут уже готов; к тому же он позволяет сбросить попытку загрузки до завершения таймаута.
Ладно, на 4-ый вопрос ответили ... Как на счёт остальных ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 18.02.2017, 16:14   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Abort не гарантирует завершения потока.
если поток находится вне управляемого кода, то он может и не получить сигнал.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с обработкой хтмл gufon Общие вопросы Delphi 13 28.03.2011 11:44
Проблема с обработкой исключений в Delphi при компиляции программы на сервере ivladak Общие вопросы Delphi 14 15.08.2009 20:58
WebBrowser проблема с загрузкой страницы и последующей обработкой OkeaH Общие вопросы Delphi 3 15.02.2009 01:43
Проблема с обработкой нажатой клавиши Bayazet Общие вопросы Delphi 7 10.02.2009 13:21
Проблема с обработкой DBF файла oleg kutkov Общие вопросы C/C++ 1 22.08.2008 21:07