Когда ставишь breakpoint, то можно ткнуть на него правой кнопкой мыши и переставить радио-баттон с All на Thread.
Тогда ты подцепишься только к одному потоку, а остальное приложение продолжит работу.
А зачем это?
У нас в системе можно запускать разные задачки. Загрузить данные из файлика, поискать дубликаты, сделать мэджик раз, сделать мэджик два, три, четыре, пять, я пошел искать... Обычно задачи работают с БД, поэтому блокируют друг друга, если запускать в параллель. Блокировка сделана на уровне приложения, чтобы не словить локи в базе.
Но некоторые задачи вполне могут выполняться вместе. Это отдельная настройка. И вот сегодня я проверяю, что задача 1 и задача 2 могут выполняться параллельно. Одна беда — обе слишком шустрые. На реальных стендах данных много, задачи идут пару часов. А у меня в базе десяток записей, тыкаешь в кнопочку, а задача уже отработала!
Как заставить задачу 1 работать долго, чтобы проверить, что я могу запустить в параллель задачу 2? Иногда помогает генерация данных. Например, если задача 1 — загрузка из файла, можно подготовить файл на 100500 строк. Ну, или поставить breakpoint в коде и начать дебажить ツ
Так и поступила:
- Ставлю бряк.
- Подключаюсь к тестовому стенду в режиме дебага.
- Запускаю задачу 1 — стенд зависает. Ага, попал в мой капкап! Но есть проблема — весь стенд подвис, пока я не «отпущу» дебаг. И я не могу запустить задачу 2.
Спросила у коллеги, что делать. Она и подсказала, что можно поставить бряк только на один поток. В итоге:
- Ставлю бряк, тыкаю на него правой кнопкой мыши и меняю с all на thread.
- Подключаюсь к тестовому стенду в режиме дебага.
- Запускаю задачу 1 — задача зависает, стенд нет!
- Запускаю задачу 2 — теперь я точно уверена, что они не конфликтуют!
Комментариев нет:
Отправить комментарий