Отмяна на заявка .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 предайте същия токен през четенето на тялото. Други клиенти предоставят свои собствени интерфейси за отмяна, прекъсване и почистване.
Повторният опит се нуждае от резултат за предишния опит. Запазете неговия идентификатор и избраното прокси, поискайте отмяна, когато е нужно, и избягвайте загуба на задачата, докато стартирате безкрайно замени. Иначе бавна крайна точка може да натрупа работа по-бързо, отколкото приложението я освобождава.
Отдалеченият резултат изисква отделна обработка. Дестинацията може вече да е получила подаване, когато настъпи отмяната. Използвайте политиката за възстановяване или идемпотентност на приложението; спирането на локалната работа не отменя отдалечено действие.