Возможно, ответ слишком прост, но я также видел это время от времени, и я бы посоветовал вам защитить свой код внутри события Session_Start
, например
if (HttpContext.Current !== null)
{
// do your actions with the Current object
}
else
{
// possibly add some logging here to see what's going on
}
Если вы заметилиэто просто условие гонки, ваш код будет реагировать правильно, а не просто попадать в исключение NullReferenceException.
Защитить его так, как в данном конкретном случае, лучше, чем добавлять операторы Элвиса (?.
) везде, где вы находитесьссылка на него, потому что это приведет к более сложным сценариям для тестирования / устранения неполадок.В других случаях, однако, этот оператор весьма полезен, например, в этом другом контексте.
Кроме того, в ссылке, которую вы указали, Я видел подсказку "Чтобы реализовать свой собственный асинхронный поставщик сессионного состояния, который работает с Microsoft.AspNet.SessionState.SessionStateModule, все, что вам нужно сделать, - это реализовать конкретный класс SessionStateStoreProviderAsyncBase, который включен в пакет NuGet Microsoft.AspNet.SessionState.SessionStateModule."
Может быть, вам просто нужно реализовать этот класс, а не использовать Session_Start - потому что здесь всегда есть HttpContext, заданный в качестве параметра, а Session_Start просто для обратной совместимости?