У меня есть ASP.NET Web API и приложения WCF.
Мне нужен «неявный» контекст, который будет передаваться при каждом запросе.В основном хранит переменные, необходимые для регистрации, или некоторые важные заголовки, которые могут изменить поведение выполнения запроса.Эти переменные собираются в событии BeginRequest
и могут использоваться где угодно в контексте одного запроса.Я не хочу явно передавать в качестве параметров эти переменные везде и до конца в моем коде.
С этого момента я использовал HttpContext.Current.Items
, и он работал нормально.Мое приложение было в основном синхронным и теперь переходит на асинхронный код.Я все еще мог бы использовать HttpContext.Current.Items
для своих асинхронных потоков, но он не работает с .ConfigureAwait(false)
(очевидно, становятся нулевыми после), и я хотел бы воспользоваться этим (убрать накладные расходы при повторном входе в контекст).
Я начал реализацию с AsyncLocal<T>
, чтобы сохранить неявные переменные контекста, и мне было интересно, насколько это безопасно и полезно?Возможно ли, что эти переменные могли просочиться между потоками при переключении из одного потока в другой в асинхронном потоке или из одного запроса в другой?