Transmettez l'échéance à l'opération qui peut annuler le travail réseau. Pour un .NET HttpClient existant configuré via un proxy :

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

L'application fournit client et uri. Cette surcharge reçoit le jeton d'annulation ; un délai autour de l'attente de sa tâche ne limiterait que l'attente de cet appelant. Interroger un indicateur d'achèvement pose le même problème : l'appelant peut partir pendant que les sockets et les workers restent occupés.

L'annulation suit l'implémentation du client et son chemin de nettoyage. Elle ne promet pas que chaque action de bas niveau s'arrête sur une instruction exacte. Laissez ce chemin se terminer et libérez les ressources que l'opération possède. Intégrez au design une lecture du corps contrôlée séparément ; pour une opération .NET ResponseHeadersRead moderne, faites passer le même jeton dans la lecture du corps. D'autres clients fournissent leurs propres interfaces d'annulation, d'abandon et de nettoyage.

Une nouvelle tentative a besoin d'un résultat pour la tentative précédente. Conservez son identifiant et le proxy choisi, demandez l'annulation si nécessaire et évitez de perdre la tâche en lançant indéfiniment des remplacements. Sinon, un point de terminaison lent peut accumuler du travail plus vite que l'application ne le libère.

Le résultat distant demande un traitement séparé. La destination a peut-être déjà reçu un envoi lorsque l'annulation survient. Utilisez la politique de reprise ou d'idempotence de l'application ; arrêter le travail local n'annule pas une action distante.

Articles similaires