ໂມງຈັບເວລາສາມາດຢຸດລໍຖ້າ ໃນຂະນະທີ່ຄຳຮ້ອງ HTTP ຍັງດຳເນີນຢູ່. ຈົ່ງສະໜອງການຍົກເລີກໃຫ້ກັບການດຳເນີນການເອງ ເມື່ອການລອງ proxy ມີງົບເວລາທີ່ກຳນົດໄວ້.

ສຳລັບແອັບພລິເຄຊັນ .NET ທີ່ທັນສະໄໝ ທີ່ມີ HttpClient ຕັ້ງຄ່າ 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);

ງົບເວລາດຽວກັນເລີ່ມກ່ອນການຕັ້ງຄ່າ ແລະ ຍັງໃຊ້ໄດ້ຕອນອ່ານເນື້ອຄວາມ. ResponseHeadersRead ສົ່ງຄືນການຄວບຄຸມຫຼັງຫົວຂໍ້ ດັ່ງນັ້ນເວລາສິ້ນສຸດຂອງ HttpClient ເອງ ບໍ່ໄດ້ກຳນົດງົບເວລາການອ່ານເນື້ອຄວາມຕໍ່ມາໂດຍລຳພັງ.

ແຍກການຍົກເລີກອອກຈາກສະຖານະ HTTP ແລະ ຄວາມຜິດພາດຂອງການຂົນສົ່ງ. OperationCanceledException ອາດມາຈາກ token ທີ່ສົ່ງໄປ ຫຼື ຈາກເວລາສິ້ນສຸດອື່ນທີ່ຕັ້ງຄ່າໄວ້; ກວດແຫຼ່ງການຍົກເລີກທີ່ກ່ຽວຂ້ອງ ແທນທີ່ຈະລາຍງານຄວາມລົ້ມເຫຼວທຸກຄັ້ງວ່າ proxy ຕາຍແລ້ວ.

ໃຊ້ຊ້ຳ client ທີ່ເປັນເຈົ້າຂອງເສັ້ນທາງ proxy ນີ້. ການຍົກເລີກການລອງໜຶ່ງຄັ້ງ ບໍ່ໄດ້ໝາຍຄວາມວ່າຕ້ອງສ້າງສະລອຍການເຊື່ອມຕໍ່ທັງໝົດຄືນໃໝ່ສຳລັບທຸກຄຳຮ້ອງຕໍ່ໄປ.

ຕົວຢ່າງນີ້ buffer ເນື້ອຄວາມຄຳຕອບທີ່ມີຂະໜາດຈຳກັດ. ການດາວໂຫຼດແບບ stream ຄວນສົ່ງ token ຜ່ານວົງຈອນການຄັດລອກ stream ແລະ ປ່ອຍຄຳຕອບໃນທຸກເສັ້ນທາງອອກ.

ການຍົກເລີກສະແດງນະໂຍບາຍຂອງການດຳເນີນການ ບໍ່ແມ່ນຄຳໝັ້ນສັນຍາເວລາໂມງທີ່ແນ່ນອນສຳລັບທຸກການກະທຳຂອງແພລດຟອມ. ຢ່າແທນມັນດ້ວຍວົງຈອນກວດສອບ Task.IsCompleted ແບບບໍ່ມີທີ່ສິ້ນສຸດ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ