API と対話するクラス ライブラリを構築しています。API を呼び出して、XML 応答を処理する必要があります。非同期接続にを使用する利点はわかりますHttpClient
が、私が行っていることは純粋に同期であるため、HttpWebRequest
.
誰かが光を当てることができれば、私はそれを大いに感謝します. 私はそれのために新しいテクノロジーを使用する人ではありません。
API と対話するクラス ライブラリを構築しています。API を呼び出して、XML 応答を処理する必要があります。非同期接続にを使用する利点はわかりますHttpClient
が、私が行っていることは純粋に同期であるため、HttpWebRequest
.
誰かが光を当てることができれば、私はそれを大いに感謝します. 私はそれのために新しいテクノロジーを使用する人ではありません。
しかし、私がしていることは純粋に同期的です
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
ブロックの新しい子供であり、古いクライアントよりも改善されている可能性があります。
これに遭遇した人にとっては、.NET 5.0 は に同期Send
メソッドを追加しましたHttpClient
。 https://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();
}
このコードは単純化された例に過ぎず、本番環境には対応していません。
クラス ライブラリを構築している場合、ライブラリのユーザーはライブラリを非同期で使用したいと考えるでしょう。そこが一番の理由だと思います。
また、ライブラリがどのように使用されるかもわかりません。おそらく、ユーザーは大量のリクエストを処理することになり、非同期で処理することで、より高速かつ効率的に実行できるようになります。
簡単に実行できる場合は、フローを非同期にしようとするライブラリのユーザーに負担をかけないようにしてください。
非同期バージョンを使用しない唯一の理由は、非同期サポートがまだ組み込まれていない古いバージョンの .NET をサポートしようとしていた場合です。