Gunakan Satu CancellationToken untuk Header dan Body .NET HttpClient
Bawa CancellationToken permintaan melalui penyiapan respons HttpClient dan pembacaan body, bukan hanya mengukur waktu tunggu pemanggil.
Stopwatch dapat berhenti menunggu sementara permintaan HTTP masih berlanjut. Berikan pembatalan kepada operasi itu sendiri ketika percobaan melalui proxy memiliki anggaran yang dimaksudkan.
Untuk aplikasi .NET modern dengan HttpClient yang dikonfigurasi proxy yang sudah ada:
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);
Anggaran yang sama dimulai sebelum penyiapan dan tetap aktif selama body dibaca. ResponseHeadersRead mengembalikan kendali setelah header, sehingga timeout penyelesaian HttpClient sendiri tidak dengan sendirinya menentukan anggaran pembacaan body berikutnya.
Pisahkan pembatalan dari status HTTP dan kesalahan transportasi. OperationCanceledException dapat berasal dari token yang diberikan atau dari timeout lain yang dikonfigurasi; periksa sumber pembatalan yang berlaku alih-alih melaporkan setiap kegagalan sebagai proxy mati.
Gunakan kembali klien yang memiliki rute proxy ini. Membatalkan percobaan tidak harus berarti membangun ulang seluruh kumpulan koneksi untuk setiap permintaan berikutnya.
Contoh ini menyangga body respons yang terbatas. Unduhan streaming harus meneruskan token melalui perulangan penyalinan alirannya dan melepaskan respons pada setiap jalur keluar.
Pembatalan menyatakan kebijakan operasi, bukan janji waktu dinding yang tepat untuk setiap tindakan platform yang mendasarinya. Hindari menggantinya dengan perulangan polling tanpa akhir atas Task.IsCompleted.