- Jak uzyskać dostęp do nagłówków odpowiedzi, zanim cała odpowiedź zostanie zwrócona?
- Jak mogę odczytać strumień po jego nadejściu?
- Czy HttpClient jest moim najlepszym wyborem dla takiej szczegółowej kontroli odbierania odpowiedzi http?
Oto wycinek które mogłyby zilustrować moje pytanie:Przeczytaj nagłówki z HttpResponseMessage, zanim zawartość zostanie ukończona w 100%
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?
...
Edycja wyjaśnienie kolejną szarą strefę dla mnie:
Wszelkie odniesienia I odkryła ma jakieś oświadczenie blokującym, to spowodowałoby oczekiwanie na przybycie zawartości.
Odwołania Czytam zwykle dostęp do metod lub właściwości na streamTask.Result lub na Treści, i nie wiem wystarczająco dużo, aby wykluczyć, które odnośniki są w porządku, jak działanie streamTask vs, które będą powodować oczekiwanie aż do zadanie się kończy.
pisałem odpowiedź, ale potem sobie sprawę, że było to nieco źle zbadane i leniwy. Zamiast tego mam pytanie uzupełniające, co rozumiesz przez blokowanie oświadczenia? Wszystkie operacje HttpClient są asynchroniczne, nie powinno być nic, co powstrzymałoby cię od czytania nagłówków i strumienia treści w oddzielnych zadaniach, uniemożliwiając im wzajemne blokowanie się. – Snixtor
@Snixtor, moje pytanie prawdopodobnie bazuje na błędnym założeniu, że jeśli wyraźnie czekam na dostęp do stremTask.Result, sprawię, że cała zawartość zostanie odczytana. Ostatecznie szukałem instalacji do A), przeczytałem nagłówki, B) przeczytałem strumień, jak to jest Będę edytować moje pytanie za pomocą pseudokodu w celu zilustrowania tego, co sobie wyobrażam. –
Masz rację, to niepoprawne założenie. 'streamTask.Result' będzie blokował, dopóki' Stream' nie będzie dostępny, ale nie wymaga, aby cała zawartość strumienia została już przesłana. Technicznie może być dostępnych zero bajtów dostępnych po wywołaniu 'streamTask.Result'. – Snixtor