Compartir por


HttpCompletionOption Enumeración

Definición

Indica si las operaciones de HttpClient deben considerarse completadas tan pronto como haya disponible una respuesta, o después de leer todo el mensaje de respuesta, incluido el contenido.

public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption = 
Public Enum HttpCompletionOption
Herencia
HttpCompletionOption

Campos

Nombre Valor Description
ResponseContentRead 0

La operación debe completarse después de leer toda la respuesta, incluido el contenido.

ResponseHeadersRead 1

La operación debe completarse en cuanto haya una respuesta disponible y se lean los encabezados. El contenido aún no se lee.

Comentarios

Advertencia

El HttpCompletionOption valor afecta al ámbito del tiempo de espera especificado en las HttpClient opciones al leer una respuesta. El tiempo de espera en siempre HttpClient se aplica a los métodos invocados pertinentes hasta el punto en el que esos métodos se completan o devuelven. Fundamentalmente, al usar la ResponseHeadersRead opción , el tiempo de espera solo se aplica hasta donde finalizan los encabezados y el contenido se inicia. La operación de lectura de contenido debe agotarse el tiempo de espera por separado en caso de que el servidor devuelva rápidamente la línea de estado y los encabezados, pero tarda demasiado tiempo en devolver el contenido. Esta consideración también se aplica a la MaxResponseContentBufferSize propiedad . El límite solo se aplica cuando se usa ResponseContentRead. A continuación se muestra un ejemplo que ilustra este punto:

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);

Se aplica a