183

の使用法について私が見つけることができるすべての例でHttpClient、それは 1 回限りの呼び出しに使用されます。しかし、複数の要求を同時に行うことができる永続的なクライアントの状況がある場合はどうなるでしょうか? client.PostAsync基本的に、の同じインスタンスに対して一度に 2 つのスレッドで呼び出すのは安全ですかHttpClient

ここで実験結果を実際に探しているわけではありません。動作する例は単なるまぐれ (および永続的なもの) である可能性があり、失敗する例は設定ミスの問題である可能性があります。理想的には、HttpClient での同時実行処理の問題に対する信頼できる回答を探しています。

4

3 に答える 3

182

Microsoft Docsによると、.NET 4.5以降、次のインスタンスメソッドはスレッドセーフです(@ischellに感謝)。

CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync
PatchAsync
于 2012-06-24T14:25:53.510 に答える
102

Henrik F. Nielsen による HttpClient に関する別の記事を次に示します。

"デフォルトの HttpClient は、リクエストの送信を開始できる最も簡単な方法です。単一の HttpClient を使用して、同時に必要な数の HTTP リクエストを送信できるため、多くのシナリオでは、1 つの HttpClient を作成するだけで、それをすべてのリクエストに使用できます。 . "

于 2012-11-15T23:44:50.193 に答える
20

Henrik F. Nielsen (HttpClient の主要アーキテクトの 1 人) によるMSDN フォーラムへの投稿を1 つ見つけました。

簡単な要約:

  • 関連する (または相互に踏み込まない) リクエストがある場合、同じ HttpClient を使用することは非常に理にかなっています。

  • 一般的に、可能な限り HttpClient インスタンスを再利用することをお勧めします。

于 2012-06-25T14:29:41.790 に答える