ASP.Net vs MVC vs WebAPI и UseTaskFriendlySynchronizationContext
У меня есть несколько проектов ASP.Net MVC и WebAPI. Большинство из них обновлены (MVC 5/WebAPI 2). Я дважды проверял свои предположения о безопасности, так как я реализую глобальный фильтр (для MVC) и обработчик делегирования (для WebAPI) для унификации безопасности в системе.
В этом контексте я столкнулся с несколькими статьями и сообщениями (см. ниже), в которых говорится, что вы всегда должны устанавливать UseTaskFriendlySynchronizationContext
на true
(по умолчанию это false
). Это кажется мне странным, так как даже в VS2013 с использованием новых шаблонов проектов MVC 5 и WebAPI 2 (а также шаблона ASP.Net WebForms) установка этого приложения не устанавливается вообще.
Документация MSDN по этому параметру практически не существует, и сообщения, которые я нашел, которые говорят, что это требуется для асинхронного программирования, похоже, относятся к контексту WebForms.
Итак, вот мои вопросы:
- Этот параметр применим ко всему ASP.Net или относится к материалу жизненного цикла страницы в ASP.Net(который я не использовал много).
- Если это так важно для современного асинхронного программирования, почему бы ему не использовать какие-либо руководства или шаблоны?
- Будет ли использовать Thread.CurrentPrincipal претензии в справочной библиотеке, которая использует ConfigureAwait (false), создавать какие-либо проблемы или будет ли поток логического контекста вызова ExecutionContext позаботиться обо мне? (мое чтение и тестирование пока показывают, что оно будет)
Вот некоторые из статей, которые я видел относительно UseTaskFriendlySynchronizationContext
:
Некоторые статьи, которые действительно помогли мне понять, как все это работает, никогда не упоминаются UseTaskFriendlySynchronizationContext
:
Ответы
Ответ 1
Отсутствует ключевое слово в этом сообщении в блоге. В частности, вам нужно либо установить UseTaskFriendlySynchronizationContext
, либо установить targetFramework
на 4.5
. Создание нового проекта устанавливает targetFramework
в 4.5
, поэтому вы получите правильное поведение (UseTaskFriendlySynchronizationContext
неявно установлено на true
).
Чтобы ответить на ваши конкретные вопросы:
- Этот параметр влияет на обработку запросов ASP.NET для всех видов запросов, а не только для WebForms.
- Большинство обучающих программ
async
предполагают сценарий приложения GUI.
- Я не уверен; Я думаю, что это будет лучше, как отдельный вопрос. Я чувствую, что вы не можете зависеть от
Thread.CurrentPrincipal
после выхода из контекста ASP.NET.