Предайте крайния срок на операцията, която може да отмени мрежовата работа. За съществуващ .NET HttpClient, конфигуриран през прокси:

using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);

Приложението подава client и uri. Тази претоварена версия приема токена за отмяна; таймаут около изчакването на нейната задача би ограничил само изчакването на този извикващ. Анкетирането на флаг за завършване има същия проблем: извикващият може да си тръгне, докато сокетите и работниците остават заети.

Отмяната следва реализацията на клиента и пътя за почистване. Тя не обещава, че всяко действие на по-ниско ниво ще спре на точна инструкция. Позволете на този път да завърши и освободете ресурсите, които операцията притежава. Включете отделно управлявано четене на тялото в дизайна; за съвременна операция .NET ResponseHeadersRead предайте същия токен през четенето на тялото. Други клиенти предоставят свои собствени интерфейси за отмяна, прекъсване и почистване.

Повторният опит се нуждае от резултат за предишния опит. Запазете неговия идентификатор и избраното прокси, поискайте отмяна, когато е нужно, и избягвайте загуба на задачата, докато стартирате безкрайно замени. Иначе бавна крайна точка може да натрупа работа по-бързо, отколкото приложението я освобождава.

Отдалеченият резултат изисква отделна обработка. Дестинацията може вече да е получила подаване, когато настъпи отмяната. Използвайте политиката за възстановяване или идемпотентност на приложението; спирането на локалната работа не отменя отдалечено действие.

Подобни статии