2012-10-24 3 views
4

컨트롤러에서 Async/Await을 사용할 때 AsyncController에서 상속해야합니까, 아니면 컨트롤러를 사용하면 실제로 비동기가되지 않습니까? Asp.net 웹 API는 어떻습니까? 나는 AsyncApiController가 있다고 생각하지 않는다. 현재 컨트롤러와 그 작업을 계승하고 있지만 실제로는 비동기입니까?비동기/기다리고 & AsyncController?

+0

내 튜토리얼 HTTP를 참조하십시오. asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 – RickAndMSFT

답변

6

MVC 4의 AsyncController 클래스의 XML 주석이 ASP.NET MVC 3

자체가 비어있는 클래스와 이전 버전과의 호환성을 위해 제공

을 말한다.

즉, 필요하지 않습니다.

+0

정보를 제공해 주셔서 감사합니다. – coding4fun

0

웹 API 측면에서 비동기 컨트롤러 기본 클래스가 필요하지 않습니다. 당신이해야 할 일은 당신의 반환 값을 하나의 Task에 랩핑하는 것입니다. 당신이 기다리고-비동기 혜택을 누릴 수 있습니다 닷넷 4.5 예를 들어

, 또한

/// <summary> 
    /// Assuming this function start a long run IO task 
    /// </summary> 
    public Task<string> WorkAsync(int input) 
    { 
     return Task.Factory.StartNew(() => 
      { 
       // heavy duty here ... 

       return "result"; 
      } 
     ); 
    } 

    // GET api/values/5 
    public Task<string> Get(int id) 
    { 
     return WorkAsync(id).ContinueWith(
      task => 
      { 
       // disclaimer: this is not the perfect way to process incomplete task 
       if (task.IsCompleted) 
       { 
        return string.Format("{0}-{1}", task.Result, id); 
       } 
       else 
       { 
        throw new InvalidOperationException("not completed"); 
       } 
      }); 
    } 

는 훨씬 더 간단한 코드를 작성하는 : // WWW :

/// <summary> 
    /// Assuming this function start a long run IO task 
    /// </summary> 
    public Task<string> WorkAsync(int input) 
    { 
     return Task.Factory.StartNew(() => 
      { 
       // heavy duty here ... 

       return "result"; 
      } 
     ); 
    } 

    // GET api/values/5 
    public async Task<string> Get(int id) 
    { 
     var retval = await WorkAsync(id); 

     return string.Format("{0}-{1}", retval, id); 
    } 
관련 문제