2015-10-20 326 views
0

我是新来的异步任务在c#中。我想做到的是以下几点: - API调用3层其他的API异步 - 返回3个datatsets作为一个异步任务从api的异步任务不运行异步

[System.Web.Http.AcceptVerbs("GET", "POST")] 
[System.Web.Mvc.HttpGet] 
public async Task<string> ServiceModelsForTournamentBase(int id) 
    { 
     var matchInfoJson = await GetJsonFromApi("api/asyncdata/searchmatchfortournament/" + id, _siteUrl); 
     var scoringPlayersJson = await GetJsonFromApi("api/asyncdata/scoringplayersfortournament/" + id, _siteUrl); 
     var teamsJson = await GetJsonFromApi("api/asyncdata/tournamentteams/" + id, _siteUrl); 

    // return json containing all three 
    } 

private async Task<string> GetJsonFromApi(string serviceUrl, Uri siteUrl) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = siteUrl; 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      var response = await client.GetAsync(serviceUrl); 
      return response.IsSuccessStatusCode 
       ? await response.Content.ReadAsStringAsync() 
       : string.Empty; 
     } 
    } 
+1

什么是你的意思是它不是取它异步?因为我向你保证它是。你的意思是? – Aron

+0

你是对的,我其实是同时说的。那里的措辞不好。 :) – user1651985

回答

1
[System.Web.Http.AcceptVerbs("GET", "POST")] 
[System.Web.Mvc.HttpGet] 
public async Task<string> ServiceModelsForTournamentBase(int id) 
    { 
     var jsons = await Task.WhenAll(
       GetJsonFromApi("api/asyncdata/searchmatchfortournament/" + id, _siteUrl), 
       GetJsonFromApi("api/asyncdata/scoringplayersfortournament/" + id, _siteUrl), 
       GetJsonFromApi("api/asyncdata/tournamentteams/" + id, _siteUrl) 
     ); 
     var matchInfoJson = jsons[0]; 
     var scoringPlayersJson = jsons[1]; 
     var teamsJson = jsons[2]; 

    // return json containing all three 
    } 
+0

谢谢,等待Task.WhenAll工作。 :) – user1651985