Brûk ien CancellationToken foar .NET HttpClient-koppen en -lichem
Jou it CancellationToken fan in fersyk sawol troch de ynstelling fan it HttpClient-antwurd as troch it lêzen fan it lichem, ynstee fan allinnich de wachttiid fan de oanropper te mjitten.
In stopwatch kin ophâlde mei wachtsjen wylst it HTTP-fersyk trochgiet. Jou annulearring oan de operaasje sels as in besykjen fia proxy in bedoeld budzjet hat.
Foar in moderne .NET-applikaasje mei in besteande proxy-konfigurearre 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);
Hetzelfde budzjet begjint foar de ynstelling en bliuwt aktyf wylst it lichem lêzen wurdt. ResponseHeadersRead jout de kontrôle werom nei de koppen, dus de eigen foltôgingstimeout fan HttpClient bepaalt op himsels net it lettere budzjet foar it lêzen fan it lichem.
Hâld annulearring skieden fan HTTP-status en transportflaters. In OperationCanceledException kin komme fan it levere token of fan in oare konfigurearre timeout; ûndersykje de tapaslike annulearringsbron ynstee fan elke mislearring as in deade proxy te melden.
Brûk de klant opnij dy't dizze proxy-route besit. It annulearjen fan in besykjen hoecht net te betsjutten dat in hiele ferbiningpool foar elk letter fersyk opnij boud wurde moat.
It foarbyld buffert in einige antwurdlichem. In streaming-download moat it token troch syn stream-kopiearloope stjoere en it antwurd op elk útgongspaad frijlitte.
Annulearring drukt in operaasjebelied út, net in krekte belofte fan wâlkloktiid foar elke ûnderlizzende platfoarmaksje. Foarkom dat jo it ferfange troch in einleaze polling-loope oer Task.IsCompleted.