Der Timeout, der nicht greift

Der Timeout, der nicht greift

- Matt

HttpClient.Timeout gilt für die gesamte Anfrage, inklusive des Lesens des Antwortkörpers. Bei einem großen Download läuft er also mitten im Übertragen ab, obwohl der Server längst antwortet.

Wer nur begrenzen will, wie lange auf den Verbindungsaufbau und die Header gewartet wird, setzt den Timeout auf InfiniteTimeSpan und arbeitet mit einem Token:

client.Timeout = Timeout.InfiniteTimeSpan;

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
using var antwort = await client.GetAsync(
    url, HttpCompletionOption.ResponseHeadersRead, cts.Token);

Das ResponseHeadersRead ist der zweite Teil davon: Ohne diese Option liest GetAsync erst den kompletten Körper, bevor es zurückkehrt.