AsyncLocal<T> с ASP.NET Web API и приложениями WCF

У меня есть ASP.NET Web API и приложения WCF.

Мне нужен "неявный" контекст, который будет передаваться с каждым запросом. В основном хранит переменные, необходимые для регистрации, или некоторые важные заголовки, которые могут изменить поведение выполнения запроса. Эти переменные собраны в BeginRequest Событие и оттуда может быть использовано где угодно в контексте одного запроса. Я не хочу явно передавать в качестве параметров эти переменные везде и до конца в моем коде.

С этого момента я использую HttpContext.Current.Items и это работало нормально. Мое приложение было в основном синхронным и теперь переходит на асинхронный код. Я все еще мог использовать HttpContext.Current.Items для моих асинхронных потоков, но он не работает с .ConfigureAwait(false) (очевидно, станет нулевым после), и я хотел бы извлечь из этого пользу (убрать накладные расходы при повторном входе в контекст).

Я начал реализацию с AsyncLocal<T> чтобы сохранить мои неявные переменные контекста и было интересно, если это безопасно и хорошая практика? Возможно ли, что эти переменные могли просочиться между потоками при переключении из одного потока в другой в асинхронном потоке или из одного запроса в другой?

0 ответов

Другие вопросы по тегам