13

몇 가지 ASP.Net MVC 및 WebAPI 프로젝트가 있습니다. 대부분은 최신 버전입니다 (MVC 5/WebAPI 2). 필자는 전역 필터 (MVC 용) 및 위임 처리기 (WebAPI 용)를 구현하여 시스템 전반의 보안을 통합하므로 보안 가정을 ​​두 번 확인했습니다.ASP.Net 대 MVC 대 WebAPI 및 UseTaskFriendlySynchronizationContext

그 맥락에서 나는 항상 UseTaskFriendlySynchronizationContexttrue (기본값은 false)으로 설정해야한다고 말하는 몇 가지 기사와 게시물 (아래 참조)을 발견했습니다. 이것은 MVC 5 및 WebAPI 2를 사용하는 VS2013에서도 (ASP.Net WebForms 템플릿은 물론) 새 프로젝트 템플릿이이 앱 설정을 전혀 설정하지 않아서 이상하게 보입니다.

이 설정에 대한 MSDN 설명서는 사실상 존재하지 않으며 비동기 프로그래밍에 필요하다고 밝혀진 게시물은 WebForms의 컨텍스트에있는 것처럼 보입니다.

그래서 여기 내 질문이있다 :이 설정은 모든 ASP.Net에 적용하거나 (내가 많이 사용하지 않는 한) ASP.Net에서 페이지 수명주기 물건

  • 에 고유 않습니다
    1. 현대 비동기 프로그래밍에 매우 중요하다면 튜토리얼이나 템플릿에서이를 참조하지 않는 이유는 무엇입니까?
    2. ConfigureAwait (false)를 사용하는 참조 된 라이브러리에서 Thread.CurrentPrincipal의 클레임을 사용하면 문제가 발생하거나 ExecutionContext의 논리적 호출 컨텍스트가 흐트러 뜨릴 수 있습니까?

    여기 UseTaskFriendlySynchronizationContext에 대해 내가 본 기사의 일부입니다 (내 독서 및 테스트는 지금까지 것을 나타냅니다) :

    정말이 모든 물건 UseTaskFriendlySynchronizationContext을 언급 결코 작동 방법에 대한 이해를 도왔 일부 기사 :

  • 답변

    15

    누락 된 키 참조가 this blog post입니다. 구체적으로는 집합을 UseTaskFriendlySynchronizationContext또는 집합을 targetFramework에서 4.5로 설정해야합니다. 새 프로젝트를 만들면 targetFramework4.5으로 설정되므로 올바른 동작을 얻을 수 있습니다 (UseTaskFriendlySynchronizationContext은 암시 적으로 true으로 설정 됨).

    는 특정 질문에 대답하려면 :

    1. 설정은 요청이 아니라 웹폼의 모든 종류의 처리 ASP.NET 요청에 영향을 미칩니다.
    2. 대부분 async 자습서는 GUI 응용 프로그램 시나리오를 가정합니다.
    3. 잘 모르겠습니다. 나는 이것이 별도의 질문으로 더 좋을 것이라고 생각한다. 내 직감은 은 ASP.NET 컨텍스트에서 나가면 Thread.CurrentPrincipal에 의존 할 수 없다는 것입니다.
    +0

    몇 가지 간단한 샘플 코드를 사용하여 # 3을 자체 질문에 포함 시켰습니다. 당신이 그것을 볼 수있는 기회가 있다면 정말 고맙겠습니다! ([Security, Thread.CurrentPrincipal 및 ConfigureAwait (false)] (http://stackoverflow.com/questions/20479888/security-thread-currentprincipal-and-configureawaitfalse)) –