2011-01-17 3 views
3

У меня многопоточное приложение с консолью C# с большим количеством потоков trhat заканчивается. Все мои потоки выходят. 90% времени, когда приложение изящно выходит. Но в 10% случаев копия моего приложения задерживается: консоль все еще открыта.C# процесс задерживается после того, как все потоки завершены

Я присоединяюсь к этому через Visual Studio 2010 и использую break, чтобы прервать его, и на нем показаны два «пустых» стековых фрейма: один для Main и один для одного из потоков, созданных приложением. В стеке ничего нет. Visual Studio говорит, что «исходный код недоступен для потока», если я нажму на любой из этих потоков, и он предлагает ссылку «разборки кода». Я нажимаю на это, и он говорит, что «дизассемблированный код недоступен для этого потока».

Любые идеи, что я могу делать неправильно?

+1

Отключите только мой код в настройках отладчика и повторите попытку. – SLaks

+0

Вы вызываете Environment.Exit для явного завершения вашего процесса? –

+0

Это похоже на проблему, которую я уже имел, но в моем случае у меня не было возможности даже приостановить отладку! + Fav. Кстати, вы правильно вилки и присоединяетесь ко всем нитям? Можете ли вы проверить трассировку стека ожидающих потоков до вашего управляемого кода? Например, поток может быть заблокирован в семафоре, который частично неуправляем. –

ответ

2

Заканчивается ли вы через несколько минут. Может случиться так, что какой-то .NET-аксессуар или поток сбора мусора все еще запущен. Это может занять некоторое дополнительное время.

Выполняется ли сборка отладки или сборка выпуска, и вы уверены, что этот процесс не является одним из тех процессов, которые размещены в Visual Studio, которые работают в целях разработки.

+0

Хороший вопрос. Я проверю это; может объяснить мою проблему. –

+1

Barfieldmv, я думаю, у вас все в порядке. Большинство моих потоков занимали исключения, которые закрывали их, но кто-то бросал исключенное исключение IsisShutdown. Стек потока разворачивается, и я думаю, что Windows не была уверена, что делать с исключением, и оставляет вещи в этом странном состоянии с двумя «пустыми» потоками. Он не сообщил об исключении, но кажется, что, когда я его поймаю, проблема не возникает. И это происходит в 10% случаев из-за состояния гонки, в основном. Благодаря! –