は、低レベルHttpWebRequest
クラスとその同類は廃止されている、とthe official recommendationはSystem.Net.Http.HttpClient
HttpClientを使用してリモートリソース全体をダウンロードしないようにしますか? UWPの下
を使用することですしかし、明白な監督やHttpClient
実装のバグのいずれかがあるように思われる:APIレスポンスストリームのレイジー評価を可能にするためにリモートリソース全体を自動的にダウンロードしないリモートURIへのリクエストを行う方法を提供していないようです(GET
リクエストの場合)。
The documentation for the HttpClient.GetAsync()
methodは言う:
この操作はブロックされません。返されたタスクオブジェクトは、全体の応答(コンテンツを含む)が読み取られた後に完了します。
これは、要求が完了したとみなされる前にリモートリソース全体がダウンロードされることを前提としています。
操作が応答が利用可能であり、ヘッダが読み込まれるとすぐに完了する必要があり、次のようにそれが文書化されているとして指定され、理論的にこの場合
HttpCompletionOption.ResponseHeadersRead
回避作業を可能にするHttpCompletionOption
パラメータが、あります。内容はまだ読み込まれていません。HttpCompletionOption
が指定されているにかかわらず、そのしかし
は、すべてのケースでは、HttpClient.GetAsync()
は(チェックを任意の制限なし!すべてを一度に!メモリに!)レスポンスの完全なContentLength
バイトを割り当てるためのプロセスに表示されます。もちろん、それはやや狂気で、本当の問題です。
私の特別なケースでは、http範囲ヘッダーをサポートしていないサーバーからマルチギガバイトのリモートリソースの最初の数kbを読み取るだけです。これは通常「汗なし」の操作です。ウェブリクエストを作成し、満足するまでレスポンスストリームから読み込み、レスポンスを閉じて気分転換してください。
デフォルトのHttpClient
APIではオプションではないようです。 rawソケットを使用して自分のHTTPリクエストを作成することを含まない簡単な回避策はありますか?すべての場合において
私のテストケースがborkedたようだとしませんでした'HttpCompletionOptions'値を確実にシミュレートします。 –