Partilhar via


HttpCompletionOption Enumeração

Definição

Indica se HttpClient operações devem ser consideradas concluídas assim que uma resposta estiver disponível ou depois de ler toda a mensagem de resposta, incluindo o conteúdo.

public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption = 
Public Enum HttpCompletionOption
Herança
HttpCompletionOption

Campos

Nome Valor Description
ResponseContentRead 0

A operação deve ser concluída depois de ler toda a resposta, incluindo o conteúdo.

ResponseHeadersRead 1

A operação deve ser concluída assim que uma resposta estiver disponível e os cabeçalhos forem lidos. O conteúdo ainda não foi lido.

Comentários

Aviso

O HttpCompletionOption valor afeta o escopo do tempo limite especificado nas HttpClient opções ao ler uma resposta. O tempo limite sempre HttpClient se aplica aos métodos invocados relevantes até o ponto em que esses métodos são concluídos/retornados. Crucialmente, ao usar a opção ResponseHeadersRead , o tempo limite só se aplica até onde os cabeçalhos terminam e o conteúdo é iniciado. A operação de leitura de conteúdo precisa ser cronometrada separadamente caso o servidor retorne prontamente a linha de status e os cabeçalhos, mas demora muito para retornar o conteúdo. Essa consideração também se aplica à MaxResponseContentBufferSize propriedade. O limite só é imposto ao usar ResponseContentRead. Veja abaixo um exemplo que ilustra este ponto:

using var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromSeconds(30);
httpClient.MaxResponseContentBufferSize = 1_000; // This will be ignored

// Because we're specifying the ResponseHeadersRead option,
// the 30-second timeout applies only up until the headers are received.
// It does not affect future operations that interact with the response content.
using HttpResponseMessage response = await httpClient.GetAsync(
    "http://localhost:12345/",
    HttpCompletionOption.ResponseHeadersRead);

// Do other checks that don't rely on the content first, like status code validation.
response.EnsureSuccessStatusCode();

// Since the HttpClient.Timeout will not apply to reading the content,
// you must enforce it yourself, for example by using a CancellationTokenSource.
using var cancellationSource = new CancellationTokenSource(TimeSpan.FromSeconds(15));

// If you wish to enforce the MaxResponseContentBufferSize limit as well,
// you can do so by calling the LoadIntoBufferAsync helper first.
await response.Content.LoadIntoBufferAsync(1_000, cancellationSource.Token);

// Make sure to pass the CancellationToken to all methods.
string content = await response.Content.ReadAsStringAsync(cancellationSource.Token);

Aplica-se a