Я считаю, что знаю концепции многопоточности и почему определенный код является или не является «поточно-ориентированным», но как человек, который в основном работает с ASP.NET, я редко задумываюсь о многопоточности и безопасности потоков. Тем не менее, я, кажется, сталкиваюсь с многочисленными комментариями и ответами (не обязательно для ASP.NET) о переполнении стека на тему «предупреждение — это не потокобезопасно!, ” и это, как правило, заставляет меня сомневаться в том, что я написал аналогичный код, который на самом деле может вызвать проблему в моих приложениях. [шок, ужас и т. д.] Поэтому я вынужден спросить:
Нужно ли разработчикам ASP.NET действительно заботиться о безопасности потоков?
Мое мнение: хотя веб-приложение по своей природе является многопоточным, каждый конкретный запрос поступает в один поток, и все нестатические типы, которые вы создаете, изменяете или уничтожаете, являются эксклюзивными для этого одного потока. запрос. Если запрос создает экземпляр объекта DAL, который создает экземпляр бизнес-объекта и Я хочу выполнить ленивую инициализацию коллекции внутри этого объекта, не имеет значения, если она не является потокобезопасной, потому что она никогда не будет затронута другим потоком. ...Правильно? (Предположим, что я не запускаю новый поток, чтобы запустить длительный асинхронный процесс во время запроса. Я прекрасно понимаю, что это все меняет.)
Конечно, статические классы, методы и переменные — полная противоположность. Они используются для каждого запроса, и разработчик должен быть очень осторожен, чтобы не создать «небезопасный» код, который при выполнении одним пользователем может оказать непреднамеренное влияние на всех остальных.
Но это все, и, таким образом, безопасность потоков в ASP.NET в основном сводится к следующему: будьте осторожны при проектировании и использовании статики. Кроме этого, вам не нужно сильно беспокоиться об этом.
Я ошибаюсь в чем-то из этого? Вы не согласны? Просветите меня!