Eine Stoppuhr kann aufhören zu warten, während die HTTP-Anforderung weiterläuft. Stellen Sie dem Vorgang selbst eine Abbruchmöglichkeit bereit, wenn ein Proxy-Versuch ein vorgesehenes Zeitbudget hat.

Für eine moderne .NET-Anwendung mit einem bestehenden proxy-konfigurierten HttpClient:

using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
    targetUrl,
    HttpCompletionOption.ResponseHeadersRead,
    budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);

Dasselbe Budget beginnt vor der Vorbereitung und bleibt aktiv, während der Body gelesen wird. ResponseHeadersRead gibt die Kontrolle nach den Headern zurück, daher definiert HttpClients eigener Abschluss-Timeout das spätere Budget für das Body-Lesen nicht für sich allein.

Halten Sie den Abbruch getrennt vom HTTP-Status und von Transportfehlern. Eine OperationCanceledException kann vom übergebenen Token oder von einem anderen konfigurierten Timeout stammen; prüfen Sie die zutreffende Abbruchquelle, statt jeden Fehler als toten Proxy zu melden.

Verwenden Sie den Client wieder, dem diese Proxy-Route gehört. Ein Versuch muss nicht abgebrochen werden, indem für jede spätere Anforderung ein ganzer Verbindungspool neu aufgebaut wird.

Das Beispiel puffert einen endlichen Antwortbody. Ein Streaming-Download sollte das Token durch seine Stream-Kopierschleife reichen und die Antwort auf jedem Ausstiegspfad freigeben.

Abbruch drückt eine Vorgangsrichtlinie aus, kein exaktes Echtzeitversprechen für jede zugrunde liegende Plattformaktion. Vermeiden Sie es, ihn durch eine endlose Abfrageschleife über Task.IsCompleted zu ersetzen.

Ähnliche Artikel