2017-03-28 1 views
-1

tfs web api를 사용하여 TFS 2013 서버에서 프로젝트를 가져 오는 코드를 작성했습니다. 메도는 1.5 분 정도의 시간이 걸리므로이 메도 드를 비동기로 설정하려고했습니다. 그래서 비동기 및 작업을 반환 형식에 추가했습니다. 내가 Visual Studio에서 볼 때 methord가 키워드를 기다리지 않는다는 메시지를 보여줍니다. 어디서 await 키워드를 추가해야합니까? 나는 비동기 프로그래밍을 처음 접했습니다.await 키워드를 구현하는 방법은 무엇입니까?

public override async Task<List<Project>> GetProjects() 
     { 

     List<Project> retunResult = new List<Project>(); 

     using (var http = new HttpClient(GetHttpHandler())) 
      { 
      var response = http.GetAsync(_baseUrl + "_apis/projectCollections?" + tfsWebApiVersionSring).Result; 
      if (response.IsSuccessStatusCode) 
       { 
       response.EnsureSuccessStatusCode(); 
       TFS2013TeamProjectCollection.Rootobject obj = JsonConvert.DeserializeObject<TFS2013TeamProjectCollection.Rootobject>(response.Content.ReadAsStringAsync().Result); 
       if (obj != null) 
        { 
        foreach (TFS2013TeamProjectCollection.Value projColl in obj.value) 
         { 

         if (projColl.state == "Started") 
          { 
          var responseProj = http.GetAsync(_baseUrl + projColl.name + "/_apis/projects?" + tfsWebApiVersionSring).Result; 
          if (responseProj.IsSuccessStatusCode) 
           { 
           responseProj.EnsureSuccessStatusCode(); 
           TFS2013TeamProject.Rootobject obj1 = JsonConvert.DeserializeObject<TFS2013TeamProject.Rootobject>(responseProj.Content.ReadAsStringAsync().Result); 
           if (obj1 != null) 
            { 
            Project p; 
            foreach (TFS2013TeamProject.Value TeamProj in obj1.value) 
             { 
             p = new Project(); 
             p.collectionName = TeamProj.collection.name; 
             p.description = TeamProj.description; 
             p.id = TeamProj.id; 
             p.name = TeamProj.name; 
             p.collectionName = TeamProj.collection.name; 
             p.url = TeamProj.url; 

             retunResult.Add(p); 
             } 
            } 
           } 
          } 
         } 
        return retunResult; 
        } 
       } 
      } 
     return null; 
     } 

답변

0

당신은 비동기 방식으로 뭔가를 얻을 수 TFS REST API 사용에 대한이 코드를 참조 할 수있다.

public static async void RESTAPIMethod() 
    { 
     HttpClientHandler authtHandler = new HttpClientHandler() 
     { 
      Credentials = CredentialCache.DefaultNetworkCredentials 
     }; 

     using (HttpClient client = new HttpClient(authtHandler)) 
     { 
      client.DefaultRequestHeaders.Accept.Add(
       new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

      using (HttpResponseMessage response = client.GetAsync(
       "Put the REST API URL here").Result) 
      { 
       response.EnsureSuccessStatusCode(); 
       var responseBody = await response.Content.ReadAsStringAsync(); 

      } 
     } 
    } 

TFS REST API를 사용하는 방법에 대한 또 다른 방법 :

당신은 또한 당신의 프로젝트에 대한이 Nuget package를 설치할 수 있습니다. 그런 다음이 패키지의 어셈블리를 사용하여 C#으로 REST API를 실행합니다. 위의 방법과 다른 점은 훨씬 편리합니다. 다음은 비동기 메서드에서 Microsoft.TeamFoundation.Build.WebApi 어셈블리를 사용하여 빌드 정보를 가져 오는 예제입니다. : What object returns from TFS2015 RestAPI

0

Result을 전혀 사용하지 않아야합니다. 코드에있는 모든 장소는 어디 있습니다

var resp = http.GetAsync(url).Result; 

당신이 있어야합니다

var resp = await http.GetAsync(url); 
관련 문제