- 応答ヘッダーにアクセスするにはどうすればよいですか?
- ストリームの到着時にストリームを読み取るにはどうすればよいですか?
- HTTP応答を受信するようなきめ細かな制御のためにHttpClientが最良の選択ですか? 、私は発掘
いずれの参照がブロッキング文のいくつかの種類があります:私のために別の灰色の領域を明確にするためにコンテンツが100%完成する前にHttpResponseMessageからヘッダーを読み取る
using (var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead)) { var streamTask = response.Content.ReadAsStreamAsync(); //how do I check if headers portion has completed? //Does HttpCompletionOption.ResponseHeadersRead guarantee that? //pseudocode while (!(all headers have been received)) //maybe await a Delay here to let Headers get fully populated access_headers_without_causing_entire_response_to_be_received //how do I access the response, without causing an await until contents downloaded? //pseudocode while (stremTask.Resul.?) //i.e. while something is still streaming //? what goes here? a chunk-read into a buffer? or line-by-line since it's http? ...
編集:
は、ここに私の質問を説明するかもしれないスニップです内容が到着するのを待つ原因となる。
参考文献私は通常、streamTask.ResultまたはContentのアクセスメソッドまたはプロパティを読み込み、streamTaskが進行中であるときにそのような参照が大丈夫であるかどうかを判断するのに十分ではないタスクが完了しました。
私は答えを書いたが、少し研究し、病気や怠惰に気づきました。代わりに私はフォローアップの質問をしています、あなたは文をブロックすることによってどういう意味ですか?すべてのHttpClient操作が非同期であるため、ヘッダーとコンテンツストリームを別々のタスクで読み取ることを妨げるものがあってはなりません。 – Snixtor
@Snixtor、私の質問はおそらく私が明示的にstremTask.Resultを待っている、またはアクセスする場合、私は全体の内容が読み取られる原因になるという誤った仮定に基づいているでしょう。 最終的に私はA)への配管を探していました。ヘッダーを読んでください。B)ストリームが来るように読んでください。 想像していることを説明するために擬似コードで質問を編集します。 –
あなたは正しい、それは間違った前提です。 'streamTask.Result'は' Stream'が利用可能になるまでブロックしますが、ストリームの内容全体が既に転送されていることを要求しません。技術的には、 'streamTask.Result'を呼び出した後、使用可能なコンテンツバイトがゼロになることがあります。 – Snixtor