для вашего первого вопроса, see here для того, как ASP.NET обрабатывает это - «Синхронизация доступа к государству Session»:
Что делать, если другие страницы пытаются одновременно получить доступ к состоянию сеанса? В этом случае текущий запрос может закончиться работой с несогласованными данными или данными, которые не являются актуальными. Чтобы этого избежать, сеанс , модуль состояния реализует механизм блокировки чтения/записи и очереди доступ к значениям состояния. Страница, на которой есть доступ к записи на состояние сеанса , будет удерживать блокировку записи в сеансе до тех пор, пока запрос не завершится.
Для вашего второго вопроса это будет не так, чтобы ваш код восстанавливал идентификатор сеанса в подходящей точке. Например, чтобы избежать session fixation, полезно восстановить идентификатор сеанса при входе в систему. На данный момент не должно быть других, медленных запросов, поступающих на сервер, поэтому это оптимальное время для выпуска нового идентификатора.
В других ситуациях может быть уместно, чтобы ваше приложение могло распознать идентификаторы прошедшего срока действия на короткое время и связать их с новым идентификатором до тех пор, пока все соединения не будут закрыты.