При запуске сборки выпуска без отладчика отличается то, что оптимизатор JIT включен.Код работает быстрее.Что тесно связано с вашей проблемой, проблемы с потоками зависят от времени.Считай, что тебе повезло (я уверен, что нет), что это идет не так, пока твой код все еще работает на твоей машине разработки, действительно неприятные проблемы с потоками - это те, которые портят твою программу раз в неделю на машинах твоего клиента.*
Сделать эту проблему отладочной - все еще самый важный способ ее решения.Кроме Tools + Attach to Process, другой способ запустить отладчик - использовать System.Diagnostics.Debugger.Launch () в вашем коде.Появится диалоговое окно, в котором можно выбрать отладчик.
Еще один способ, который не требует подключения отладчика, - переключить VS на сборку выпуска.Используйте Tools + Options, Debugging, General и снимите отметку «Подавить оптимизацию JIT при загрузке модуля».Нажатие F5 теперь запускает вашу программу с включенным оптимизатором и предварительно подключенным отладчиком.Тем не менее, это не совсем хлам, поскольку отладчик, подключенный сам по себе, вызывает различия во времени.
Другой распространенный подход к устранению трудных ошибок параллелизма - это добавление регистрации в ваш код.Напишите строку всякий раз, когда он получил блокировку.Если повезет, вы быстро найдете причину тупика.Если вам не так повезло, запись в журнал изменяет время потока достаточно, чтобы тупик исчез.Было поставлено множество программ с включенным ведением журналов, потому что это был единственный способ сохранить их работоспособность.
Анализ кода - это еще один подход, особенно когда он выполняется кем-то другим.И последнее, но не менее важное: подумайте, действительно ли многопоточность является оптимальным решением в вашем приложении.Ворчание "я действительно решил это?"чувство никогда не уходит, доказывая, что многопоточный код не содержит дефектов, почти невозможно.