В окне «Отладка вывода» снова и снова отображаются «Начальная нить» и «Остановка нити» - PullRequest
0 голосов
/ 16 мая 2019

Я преобразовал наше приложение из C # в Windows в .Net Core, работающее в Linux с интегрированной средой разработки Ryder.

Наше приложение использует несколько сторонних платформ, таких как библиотеки ServiceStack, RabbitMq и Mailkit.

При открытии окна «Вывод отладочной информации» я вижу, что система запускает и останавливает потокисо скоростью более 10 в секунду.

Started Thread 18213
Exited Thread 18213
Started Thread 18214
Exited Thread 18214
Started Thread 18215
Exited Thread 18215
Started Thread 18216
Exited Thread 18216
Started Thread 18217
Exited Thread 18217
Started Thread 18218

Поскольку существует 100 классов, я не знаю, с чего начать, чтобы увидеть, какой метод запущен и какие потоки останавливаются с такой скоростью.

Как я могу отследить это?

  • Есть ли метод, который я мог бы перегрузить в пуле потоков, который позволил бы нам установить точку останова, когда эти потоки запускаются и останавливаются.

  • Я попытался включить settings > Build, Execution > Debugger > Process exceptions outside of my code И я вижу, что в библиотеку RabbitMQ выдается много исключений, но я понятия не имею, относится ли это кТема зацикливания.

  • Я включил System.Treading.ThreadStartExcepton, и он не попал.

Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

К сожалению, нет механизма для отслеживания того, что запускает или останавливает потоки в приложении .NET.Если вы исследуете поток в отладчике, вы можете увидеть стек вызовов потока, включая (в основании стека) метод, который был вызван для запуска потока, выполняющего работу.Это может дать вам некоторую информацию о том, что должен был делать поток.

Реальность такова, что если это не ваш код, вы, вероятно, не сможете многое сделать о том, как управляются эти потоки.Вероятно, вы видите нормальное поведение пула потоков .NET.Если вы не видите проблему с большим количеством потоков или с очень большим оборотом потоков, лучше не тянуть эту нить.

1 голос
/ 16 мая 2019

Добро пожаловать в пул потоков .Net Core и async-await в целом.

В чем проблема у вас здесь?

Эти выходные данные Started Thread и Exited Thread - это не ошибки в вашем коде, это дизайн ядра Asp.Net Core

Пул потоков - это пул рабочих потоков, доступный по запросу. по мере необходимости. Примеры кода в этой статье показывают, как использовать пул потоков в .NET Core с использованием C #.

...