Gumamit ng Isang CancellationToken para sa Headers at Body ng .NET HttpClient
Ipadala ang CancellationToken ng kahilingan sa paghahanda ng tugon ng HttpClient at sa pagbasa ng body, sa halip na i-oras lamang ang paghihintay ng tumatawag.
Maaaring tumigil sa paghihintay ang stopwatch habang nagpapatuloy ang kahilingang HTTP. Ibibigay ang pagkansela sa operasyon mismo kapag ang pagtatangka sa proxy ay may nakatakdang badyet ng oras.
Para sa makabagong aplikasyong .NET na mayroon nang HttpClient na naka-configure sa proxy:
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);
Nagsisimula ang parehong badyet bago ang paghahanda at nananatiling aktibo habang binabasa ang body. Ibinabalik ng ResponseHeadersRead ang kontrol pagkatapos ng mga header, kaya ang sariling timeout ng HttpClient ay hindi nagtatakda nang mag-isa ng badyet ng susunod na pagbasa ng body.
Ihiwalay ang pagkansela sa HTTP status at mga error sa transport. Maaaring magmula ang OperationCanceledException sa ibinigay na token o sa ibang naka-configure na timeout; suriin ang naaangkop na pinagmulan ng pagkansela sa halip na iulat ang bawat kabiguan bilang patay na proxy.
Gamitin muli ang client na nagmamay-ari ng rutang proxy na ito. Ang pagkansela ng isang pagtatangka ay hindi nangangahulugang muling itatayo ang buong pool ng koneksyon para sa bawat susunod na kahilingan.
Nagba-buffer ang halimbawa ng tugon na may takdang sukat. Sa streaming download, dapat ipasa ang token sa loop ng pagkopya ng stream at pakawalan ang tugon sa bawat daan ng paglabas.
Ang pagkansela ay nagpapahayag ng patakaran ng operasyon, hindi ng eksaktong pangako ng oras para sa bawat aksyon ng plataporma. Huwag itong palitan ng walang katapusang loop ng pagtatanong sa Task.IsCompleted.