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