Штоперица може престати да чека док HTTP захтев још траје. Препустите отказивање самој операцији када покушај преко проксија има задати временски буџет.

За модерну .NET апликацију са постојећим 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);

Исти буџет почиње пре припреме и остаје активан док се тело чита. ResponseHeadersRead враћа контролу после заглавља, па сопствени тајмаут HttpClient-а сам по себи не одређује буџет каснијег читања тела.

Држите отказивање одвојено од HTTP статуса и транспортних грешака. OperationCanceledException може доћи из прослеђеног токена или из другог подешеног тајмаута; проверите одговарајући извор отказивања уместо да сваки неуспех пријавите као мртав прокси.

Поново користите клијента који поседује ову прокси руту. Отказивање једног покушаја не значи поновно прављење целог пула веза за сваки следећи захтев.

Пример баферује тело одговора коначне величине. Код стримованог преузимања токен треба проследити кроз петљу копирања стрима и ослободити одговор на свакој излазној путањи.

Отказивање изражава политику операције, а не тачно обећање времена за сваку радњу платформе. Не замењујте га бесконачном петљом провере Task.IsCompleted.

Повезани чланци