Как выполнить действия после отработки всех потоков шаблона? С#

lbvf65

Client
Регистрация
20.08.2020
Сообщения
438
Благодарностей
113
Баллы
43
Как выполнить действия после отработки всех потоков шаблона? == > взял тему отсюда.

пример.

Приветствую.

Допустим есть некий парсер, который во много потоков парсит нужную информацию с сайта и складывает ее в список(файл). В определенный момент один из потоков обнаруживает признак того, что парсить больше нечего и завершается по красному выходу с последующим переходом к Bad end. Вот тут хотелось бы произвести со спарсенными данными опеределенные действия (например отсортировать как-то). НО, другие потоки еще не завершились и продолжают складывать данные в список т.е сортировать рано. Есть ли способ "подождать" пока все остальные потоки завершатся и сделать необходимые действия? Теоретически конечно можно поставить паузу на пару-тройку минут и потом сделать все что нужно ... но может есть другие, более правильные способы?
Подскажите сниппет C# Который бы определял на 100%, что это точно последний инстанс?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 722
Благодарностей
1 377
Баллы
113
каждый поток на старте кладет в список запись (любую)
каждый поток при завершении ( на bad/good end ) удаляет из списка запись которую добавил
после удаления строки из списка можно проверять кол-во строк оставшихся в списке и если их будет 0, то это последний поток
 

lbvf65

Client
Регистрация
20.08.2020
Сообщения
438
Благодарностей
113
Баллы
43
каждый поток на старте кладет в список запись (любую)

каждый поток при завершении ( на bad/good end ) удаляет из списка запись которую добавил

после удаления строки из списка можно проверять кол-во строк оставшихся в списке и если их будет 0, то это последний поток

А в случае экстренного прерывания шаблона и вылета зенки, счетчики могут сбиться.
 

lbvf65

Client
Регистрация
20.08.2020
Сообщения
438
Благодарностей
113
Баллы
43

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
каждый поток на старте кладет в список запись (любую)
каждый поток при завершении ( на bad/good end ) удаляет из списка запись которую добавил
после удаления строки из списка можно проверять кол-во строк оставшихся в списке и если их будет 0, то это последний поток
вот только в реальной работе проекта, не всегда шаблон выходит на bad/good end.
например зенка упала, стартанула заного и получаем что ? правильно, кашу данных в списке, которую не разгребсти никогда :bk:
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 722
Благодарностей
1 377
Баллы
113
смотря что считать экстренным случаем
если прерывание в котором будет исполняться bad end, то ничего не собьется
если свет вырубится и ПК внезапно вырубится, то никакой способ не поможет
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

lbvf65

Client
Регистрация
20.08.2020
Сообщения
438
Благодарностей
113
Баллы
43
а какие параметры у него, что можно однозначно сказать что он вот последний из 100 ?
Ну, по идее, можно по 1 параметрам определить.

Это чисто мое предположение.
в данный момент времени нету других запущенных потоков инстансов Кроме этого.

Этого параметра вполне хватит, чтобы реализовать В всю остальную логику.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
вообще вот этот код ZennoPoster.GetThreadsCount(name); вернет количество работающих потоков.
вот получаешь число и строишь логику на его основе. хорошо работает в отдельно взятом шаблоне, который управляет другими шаблонами, когда проверяешь на нуль.
как будет работать в одном шаблоне, если проверять на 1... фиг знает, это надо эксперименты ставить на наличие лагов этого показателя. возможно придется использовать лок, задержку и повторное считывание.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)