web-dev-qa-db-ja.com

HTTPクライアントを同期させる:応答を待つ

アップロードするファイルがあり、投稿が非同期で同期ではないため、一部のファイルが失敗しました。

この呼び出しを同期呼び出しとして作成しようとしています。

応答を待ちたいです。

この呼び出しを同期として行うにはどうすればよいですか?

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);
        }
    }
}

助けていただければ幸いです!

28
Alon Shmiel

変化する

await content.ReadAsStringAsync().ConfigureAwait(false)

content.ReadAsStringAsync().Result

readAsStringAsyncはTaskオブジェクトを返します。行末の「.Result」は、コンパイラに内部文字列を返すように指示します。

50
michael berezin

それはそれを行う必要があります:

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
NCC-2909-M