Rendre le client http synchrone: attendre la réponse

j'ai un fichier à télécharger et certains fichiers ont échoué parce que le post est asynchrone et pas synchrone..

j'essaie de faire cet appel comme appel synchronisé..

je veux attendre la réponse.

Comment puis-je rendre cet appel synchrone?

static async Task<JObect> Upload(string key, string url, string 
                                 sourceFile, string targetFormat)
{ 
    using (HttpClientHandler handler = new HttpClientHandler { 
                                           Credentials = new NetworkCredential(key, "") 
                                       })
    using (HttpClient client = new HttpClient(handler))
    {
         var request = new MultipartFormDataContent();
         request.Add(new StringContent(targetFormat), "target_format");
         request.Add(new StreamContent(File.OpenRead(sourceFile)),
                                       "source_file",
                                        new FileInfo(sourceFile).Name);

        using (HttpResponseMessage response = await client.PostAsync(url,
                                                           request).ConfigureAwait(false))

        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync().ConfigureAwait(false);
            return JsonObject.Parse(data);
        }
    }
}

Toute aide appréciée!

24
demandé sur Darrel Miller 2015-06-30 07:56:25

2 réponses

modifier

await content.ReadAsStringAsync().ConfigureAwait(false)

content.ReadAsStringAsync().Result

le ReadAsStringAsync renvoie un objet de tâche. le.' Le résultat à la fin de la ligne de dire au compilateur de retourner à l'intérieur de la chaîne.

41
répondu michael berezin 2015-06-30 06:38:51

cela devrait le faire:

static async Task<JObect> Upload(string key, string url, string 
                             sourceFile, string targetFormat)
{ 
    using (HttpClientHandler handler = new HttpClientHandler { 
                                           Credentials = new NetworkCredential(key, "") 
                                   })
    using (HttpClient client = new HttpClient(handler))
    {
         var request = new MultipartFormDataContent();
         request.Add(new StringContent(targetFormat), "target_format");
         request.Add(new StreamContent(File.OpenRead(sourceFile)),
                                   "source_file",
                                    new FileInfo(sourceFile).Name);

        using (HttpResponseMessage response = await client.PostAsync(url,request))

        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync();
            return JsonObject.Parse(data);
        }
    }
}
1
répondu NCC-2909-M 2015-06-30 05:24:06