2012-05-09 2 views
1

4.5 Beta의 Visual Studio 2011 Beta를 사용하고 있습니다. 메서드가 none "TaskAsync"작업을 반환하면 ASP.Net MVC 4에 버그가있는 것 같습니다. 요청이 중단됩니다.asp.net mvc 4 비동기 컨트롤러 Hanging on None TaskAsync 메서드

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 

    public async Task<ActionResult> Test1() 
    { 
     string s = await new WebClient().DownloadStringTaskAsync("http://google.com"); 
     return Content("asdf"); 
    } 

    public async Task<ActionResult> Test2() 
    { 
     string MyConString = ConfigurationManager.ConnectionStrings["Master"].ConnectionString; 
     MySqlConnection connection = new MySqlConnection(MyConString); 
     await connection.OpenAsync(); 
     connection.Close(); 
     return Content("asdf"); 
    } 
} 

Test1이 제대로 작동합니다. 메서드가 반환되면 Test2가 중단됩니다. 오류없이 코드를 통해 디버깅 할 수 있습니다.

누구나 수정/해결 방법을 알고 계십니까?

한마디로
+0

: http://stackoverflow.com/questions/9977309/async-ctp-mvc4-and-workflows –

+0

당신이 오류없이 디버깅 말할 때, Test2의 Content() 줄에 중단 점이 발생합니까? 그렇다면 관련 SO 스레드와 같은 수율을 추가해도 도움이 될까요? –

+0

예 Content() 줄이 적중되고 메서드가 실제로 완료됩니다. 메서드가 MVC 엔진으로 돌아온 후에 멈 춥니 다. – user896993

답변

4

Known issue with MVC 4 Beta.

의 ~ /의 Web.config에 다음을 추가합니다

<appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 

그런 다음 액션 메소드의 첫 번째 행으로 await Task.Yield();을 추가합니다. 합니다 (을 기다리고 잊지 마세요!)이이 관련 될 수

+0

그게 효과가! 답변 주셔서 감사합니다 :) – user896993

+0

async 및 await가 내부적으로 사용되지만 컨트롤러 작업 방법까지는 사용하지 않을 때 작동합니까? (즉, 액션 메소드에서 호출 된 코드는 비동기 메소드의 Task.Result를 기다립니다.) 그런 경우에 작동해야한다면 잘못된 결과가 발생합니다. 그 포인트 주변을 감기 게됩니다. ISS가 방황하고 브라우저를 닫을 때까지 "Waiting for www.testwebsite.local"에 머물러 있으면 오류 모드를 디버그하는 데 시간이 많이 걸리고 어렵습니다. – Anthony