С# и потоки

zrab

Есть поток, во время которого происходит подключение к БД. Максимальное время подключения (предел) 100 сек , и менять мы его не желаем. Зачастую подключается очень быстро, но иногда и за 100 сек подключиться не в состоянии.
Также есть кнопка, убивающая поток (метод Abort ). Если поток пытается подключиться к быстроподключаемой БД, то и прерывается он очень быстро, но если к тем, к которым нельзя подключиться - то метод Abort выполняется целых 100 секунд, что сильно грузит основное приложение. Что посоветуете сделать? Как сделать, чтобы он убился, не грузив при этом основную форму?

kruzer25

В потоках и C# не разбираюсь, но что насчёт того, чтобы эта твоя Abort выполнялась в третьем потоке?

kokoc88

Что посоветуете сделать? Как сделать, чтобы он убился, не грузив при этом основную форму?
Копать в сторону отмены синхронной операции соединения с БД. Если синхронное соединение нельзя отменить, то надо смотреть в сторону асинхронного соединения и его реализации. Какой механизм работы с БД у вас используется?

bleyman

Я, помниццо, пришёл к выводу, что Thread.Abort вызывать нельзя никогда и ни за что, а если появляется желание, значит, что-то ты делаешь не так. Мне чуть ли не хип коррапшен удалось получить, вызывая аборт в стратегический момент общения треда с последовательным портом.
Почему бы не заменить один 100-секундный таймаут на 100 односекундных? А кнопка Abort, конечно же, должна флажок выставлять просто.
Ещё посмотри, может у коннекшена есть принудительный корректно обрабатываемый Close, который можно дёрнуть из другого потока, чтобы в первый вывалился из попытки по эксепшену, словил его и завершился.
Оставить комментарий
Имя или ник:
Комментарий: