Сегодня мне пришлось исправить некоторый старый код VB.NET 1.0, который использует потоки. Проблема заключалась в обновлении элементов пользовательского интерфейса из рабочего потока вместо UI-потока. Мне потребовалось некоторое время, чтобы узнать, что я могу использовать утверждения с InvokeRequired, чтобы найти проблему.
Помимо вышеупомянутой проблемы одновременной модификации, существуют взаимоблокировки, условия гонки и т.д., на которые можно было столкнуться. Поскольку отладка/исправление проблем с потоками - это боль, мне интересно, как я могу уменьшить ошибки/ошибки в кодировке в этой области и как я могу легче найти их. Итак, что я прошу, есть:
- Есть ли хорошие шаблоны для написания многопоточного кода? Что такое Dos и Don'ts?
- Какие методы вы используете для отладки проблем с потоками?
Пожалуйста, укажите примерный код, если это применимо и возможно. Ответы должны быть связаны с платформой .NET(любая версия).