Gunakan Satu CancellationToken untuk Pengepala dan Badan .NET HttpClient
Bawa CancellationToken permintaan melalui penyediaan respons HttpClient dan pembacaan badan, bukan hanya memasa masa tunggu pemanggil.
Jam randik boleh berhenti menunggu sedangkan permintaan HTTP masih berjalan. Berikan pembatalan kepada operasi itu sendiri apabila cubaan proksi mempunyai bajet masa.
Bagi aplikasi .NET moden yang sudah mempunyai HttpClient yang dikonfigurasikan proksi:
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);
Bajet yang sama bermula sebelum penyediaan dan kekal aktif semasa badan dibaca. ResponseHeadersRead memulangkan kawalan selepas pengepala, jadi tamat masa HttpClient sendiri tidak menentukan bajet bacaan badan kemudian.
Asingkan pembatalan daripada status HTTP dan ralat pengangkutan. OperationCanceledException boleh datang daripada token yang dibekalkan atau tamat masa lain; periksa sumber pembatalan yang berkenaan dan jangan laporkan setiap kegagalan sebagai proksi mati.
Guna semula klien yang memiliki laluan proksi ini. Membatalkan satu cubaan tidak bermakna membina semula seluruh kolam sambungan untuk setiap permintaan kemudian.
Contoh menampan badan respons yang terhad. Muat turun penstriman perlu menyalurkan token melalui gelung salin strim dan melepaskan respons pada setiap laluan keluar.
Pembatalan menyatakan dasar operasi, bukan janji jam dinding yang tepat bagi setiap tindakan platform. Elakkan menggantikannya dengan gelung tinjauan tanpa henti pada Task.IsCompleted.