Ett stoppur kan sluta vänta medan HTTP-begäran fortsätter. Lämna avbrytandet till själva åtgärden när ett proxyförsök har en avsedd tidsbudget.

För ett modernt .NET-program med en befintlig proxykonfigurerad 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);

Samma budget börjar före uppsättningen och gäller även när body läses. ResponseHeadersRead lämnar tillbaka kontrollen efter rubrikerna, så HttpClients egen tidsgräns avgör inte ensam budgeten för den senare body-läsningen.

Håll avbrytande åtskilt från HTTP-status och transportfel. En OperationCanceledException kan komma från den medskickade tokenen eller från en annan konfigurerad tidsgräns; undersök den aktuella avbrytandekällan i stället för att rapportera varje fel som en död proxy.

Återanvänd klienten som äger den här proxyvägen. Att avbryta ett försök innebär inte att hela anslutningspoolen måste byggas om för varje senare begäran.

Exemplet buffrar en svarsbody av ändlig storlek. En strömmande nedladdning bör skicka tokenen genom strömkopieringsloopen och frigöra svaret på varje utgångsväg.

Avbrytande uttrycker en åtgärdspolicy, inte ett exakt klocklöfte för varje plattformsåtgärd. Ersätt det inte med en oändlig avfrågningsloop över Task.IsCompleted.

Relaterade artiklar