223

API と対話するクラス ライブラリを構築しています。API を呼び出して、XML 応答を処理する必要があります。非同期接続にを使用する利点はわかりますHttpClientが、私が行っていることは純粋に同期であるため、HttpWebRequest.

誰かが光を当てることができれば、私はそれを大いに感謝します. 私はそれのために新しいテクノロジーを使用する人ではありません。

4

6 に答える 6

420

しかし、私がしていることは純粋に同期的です

HttpClient同期要求には問題なく使用できます。

using (var client = new HttpClient())
{
    var response = client.GetAsync("http://google.com").Result;

    if (response.IsSuccessStatusCode)
    {
        var responseContent = response.Content; 

        // by calling .Result you are synchronously reading the result
        string responseString = responseContent.ReadAsStringAsync().Result;

        Console.WriteLine(responseString);
    }
}

HttpClient使用する理由WebRequestに関する限り、まあ、HttpClientブロックの新しい子供であり、古いクライアントよりも改善されている可能性があります。

于 2013-01-21T09:20:38.897 に答える
13

これに遭遇した人にとっては、.NET 5.0 は に同期Sendメソッドを追加しましたHttpClienthttps://github.com/dotnet/runtime/pull/34948

ここで詳しく説明されているメリットも理由です- https://github.com/dotnet/runtime/issues/32125

したがって、 の代わりにこれを使用できますSendAsync。例えば

public string GetValue()
{
    var client = new HttpClient();
            
    var webRequest = new HttpRequestMessage(HttpMethod.Post, "http://your-api.com")
    {
        Content = new StringContent("{ 'some': 'value' }", Encoding.UTF8, "application/json")
    };

    var response = client.Send(webRequest);

    using var reader = new StreamReader(response.Content.ReadAsStream());
            
    return reader.ReadToEnd();
}

このコードは単純化された例に過ぎず、本番環境には対応していません。

于 2021-03-16T13:18:57.687 に答える
8

クラス ライブラリを構築している場合、ライブラリのユーザーはライブラリを非同期で使用したいと考えるでしょう。そこが一番の理由だと思います。

また、ライブラリがどのように使用されるかもわかりません。おそらく、ユーザーは大量のリクエストを処理することになり、非同期で処理することで、より高速かつ効率的に実行できるようになります。

簡単に実行できる場合は、フローを非同期にしようとするライブラリのユーザーに負担をかけないようにしてください。

非同期バージョンを使用しない唯一の理由は、非同期サポートがまだ組み込まれていない古いバージョンの .NET をサポートしようとしていた場合です。

于 2013-01-21T09:24:12.180 に答える