Предадете го рокот на операцијата што може да ја откаже мрежната работа. За постоечки .NET HttpClient конфигуриран преку прокси:

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

Апликацијата обезбедува client и uri. Ова преоптоварување го прима токенот за откажување; временско ограничување околу чекањето на неговата задача би го ограничило само чекањето на тој повикувач. Анкетирањето на знаменце за завршување го има истиот проблем: повикувачот може да замине додека сокетите и работниците остануваат зафатени.

Откажувањето ја следи имплементацијата на клиентот и патеката за чистење. Тоа не ветува дека секое дејство на пониско ниво ќе запре на точна инструкција. Дозволете таа патека да заврши и ослободете ги ресурсите што ги поседува операцијата. Вклучете во дизајнот одделно контролирано читање на телото; за современа .NET ResponseHeadersRead операција предадете го истиот токен низ читањето на телото. Другите клиенти обезбедуваат свои интерфејси за откажување, прекин и чистење.

Повторниот обид бара исход за претходниот обид. Зачувајте го неговиот идентификатор и избраниот прокси, побарајте откажување кога е потребно и избегнувајте губење на задачата додека бесконечно стартувате замени. Инаку бавна крајна точка може да натрупа работа побрзо отколку што апликацијата ја ослободува.

Далечниот исход бара одделно ракување. Дестинацијата може веќе да добила испраќање кога се случува откажувањето. Користете ја политиката за обновување или идемпотентност на апликацијата; запирањето локална работа не отповикува далечно дејство.

Поврзани статии