2017-03-28 2 views
-1

私はtfs web apiを使ってTFS 2013サーバーからプロジェクトを取得するコードを書いています。メトードが実行に時間がかかりすぎる(1.5分のように)ので、私はこのメトードを非同期にしたいと思っていました。だから私は非同期と戻り値の型でタスクを追加しました。私がビジュアルスタジオに見ると、メトードがキーワードを待っていないというメッセージが表示されます。どこに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); 
関連する問題