2014-11-10 2 views
0

컨트롤러의 작업 메서드에 목록을 반환하는 비동기 메서드를 호출하려고합니다. 그러나 Action 메서드는 비동기 메서드가 아닙니다. 액션에서 async 메서드를 호출 할 수 있도록이 코드를 어떻게 수정할 수 있습니까? 위에 컨트롤러 액션 메소드의 서명을 변경하는 경우MVC 컨트롤러 작업에서 asyc 메서드를 호출하려면 어떻게해야합니까?

public ActionResult AdvisorsMapCompleted() 
    { 
     List<AdvisorMapInfo> infos = await AdvisorsMapBL.getAdvisorsAsync(); 
     //task.Wait(); 


    } 

public static async Task<List<AdvisorMapInfo>> getAdvisorsAsync() 
    { 
     var auth = new AuthenticationClient(); 
     //Authenticate with Salesforce 
     var url = IsSandboxUser.Equals("true", StringComparison.CurrentCultureIgnoreCase) 
      ? "https://test.salesforce.com/services/oauth2/token" 
      : "https://login.salesforce.com/services/oauth2/token"; 

     await auth.UsernamePasswordAsync(ConsumerKey, ConsumerSecret, Username, Password, url);   
     var client = new ForceClient(auth.InstanceUrl, auth.AccessToken, auth.ApiVersion); 
     const string qry = "SELECT Name,Primary_Contact__c,Asset_Range_Lower__c,Asset_Range_Upper__c,BillingAddress FROM Account WHERE (Account_Type__c='Advisor' or Account_Type__c='provider')"; 
     var accts = new List<AdvisorMapInfo>(); 
     var results = await client.QueryAsync<AdvisorMapInfo>(qry); 
     var totalSize = results.totalSize; 
     accts.AddRange(results.records); 
     var nextRecordsUrl = results.nextRecordsUrl; 
     if (!String.IsNullOrEmpty(nextRecordsUrl)) 
     { 
      while (true) 
      { 
       var continuationResults = await client.QueryContinuationAsync<AdvisorMapInfo>(nextRecordsUrl); 
       totalSize = continuationResults.totalSize; 
       accts.AddRange(continuationResults.records); 
       if (string.IsNullOrEmpty(continuationResults.nextRecordsUrl)) break; 
       nextRecordsUrl = continuationResults.nextRecordsUrl; 
      } 
     } 
     return accts; 

    } 

답변

1

트릭을 할해야하는,

public async Task<ActionResult> AdvisorsMapCompleted() 
    { 
     List<AdvisorMapInfo> infos = await AdvisorsMapBL.getAdvisorsAsync(); 
     //task.Wait(); 
    } 

을보십시오.

관련 문제