Entity Framework는 저장 프로 시저를 DbContext 클래스의 메서드로 가져옵니다. 그러나 비동기식이 아니므로 스레드를 차단하지 않고도 비동기식 WebApi 컨트롤러에서 호출 할 수 있기를 원합니다. 비동기 래퍼 메서드를 작성했지만 Visual Studio에서 제공하는 경고로 혼란 스럽습니다.동기 코드 비동기 실행
이 코드는 비동기 적으로 실행됩니까?
public async Task AttachTypeToMeetingTime(int meetingTimeId,int meetingTypeId)
{
await Task.Run(() =>
{
//synchronous method generated by EF.
//VS warning here
AttachTypeToMeetingTime(meetingTimeId, meetingTypeId);
});
}
비주얼 스튜디오 나에게 경고를 준다 : 나는 제안을 따른다면 통화가 그러나
을 완료되기 전에이 호출이 기다리고 있지 않기 때문에
을, 현재의 thread의 실행은 계속 그리고 빨간색으로 밑줄이 그어지고 컴파일되지 않을 것입니다.
통화가 완료되기 전에 현재 스레드를 계속하고 싶지 않습니까?
사이드 노트 : 나는 당신이 당신이 실제로만을 수행하려고하면 성능 저하 이해를 바랍니다 - 대신 당신은 지금 다른 스레드 풀 스레드로 작업을 이동하고 컨텍스트 스위치/스레드를 지불 요청을 처리하는 스레드에서 하나의 스레드가있는의 동기화 (또한 그 스레드 또한 culture/Current 요청으로 설정되지 않으며 나중에 모든 종류의 재미를 줄 것입니다) –
@AlexeiLevenkov 미안 해요. 해결 섹션을 자체 답변으로 이동했습니다. 어떻게 내가 비동기 컨트롤러 메소드 및/또는'FindAsync()'와 같은 바닐라 EF 비동기 메소드와 다른 일을하고 있는가? –
True 비동기 메서드는 스레드에서 대기 중 대기를 수행하지 않습니다 (동기 한 번과 달리). 일반적으로 [동기 메서드에 대한 비동기 래퍼를 공개해야합니까?] (http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx)와 같은 비동기를 읽는 것이 좋습니다. 출발점. –