Скасування запиту .NET HttpClient через проксі з токеном терміну
Скасуйте саму мережеву операцію, коли спливає термін проксі, замість того щоб обмежувати лише очікування виклику.
Передайте термін операції, яка може скасувати мережеву роботу. Для наявного .NET HttpClient, налаштованого через проксі:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Застосунок надає client і uri. Це перевантаження приймає токен скасування; тайм-аут навколо очікування його задачі обмежив би лише очікування цього виклику. Опитування прапорця завершення має ту саму проблему: виклик може піти, поки сокети й робітники залишаються зайнятими.
Скасування дотримується реалізації клієнта та шляху очищення. Воно не обіцяє, що кожна дія нижчого рівня зупиниться на точній інструкції. Дозвольте цьому шляху завершитися й звільніть ресурси, якими володіє операція. Включіть у проєкт окремо кероване читання тіла; для сучасної операції .NET ResponseHeadersRead передайте той самий токен через читання тіла. Інші клієнти надають власні інтерфейси скасування, переривання й очищення.
Повторна спроба потребує результату попередньої спроби. Збережіть її ідентифікатор і вибраний проксі, запросіть скасування за потреби й уникайте втрати задачі, нескінченно запускаючи заміни. Інакше повільна кінцева точка може накопичувати роботу швидше, ніж застосунок її звільняє.
Віддалений результат потребує окремої обробки. Можливо, адресат уже отримав надсилання, коли відбувається скасування. Використовуйте політику відновлення або ідемпотентності застосунку; зупинка локальної роботи не скасовує віддаленої дії.