Passeu el termini a l'operació que pot cancel·lar la feina de xarxa. Per a un .NET HttpClient existent configurat amb proxy:

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

L'aplicació subministra client i uri. Aquesta sobrecàrrega rep el testimoni de cancel·lació; un temps d'espera al voltant de l'espera de la seva tasca només limitaria l'espera d'aquest cridador. Sondar una bandera de compleció té el mateix problema: el cridador pot marxar mentre els sòcols i els treballadors continuen ocupats.

La cancel·lació segueix la implementació del client i el camí de neteja. No promet que cada acció de nivell inferior s'aturi en una instrucció exacta. Deixeu que aquest camí acabi i allibereu els recursos que posseeix l'operació. Incloeu la lectura del cos controlada per separat en el disseny; per a una operació .NET ResponseHeadersRead moderna, passeu el mateix testimoni durant la lectura del cos. Altres clients proporcionen les seves pròpies interfícies de cancel·lació, avortament i neteja.

Un reintent necessita un resultat per a l'intent anterior. Conserveu-ne l'identificador i el proxy seleccionat, sol·liciteu la cancel·lació quan calgui i eviteu perdre la tasca mentre inicieu substituts indefinidament. En cas contrari, un punt final lent pot acumular feina més de pressa del que l'aplicació l'allibera.

El resultat remot necessita un tractament a part. És possible que la destinació ja hagi rebut un enviament quan es produeix la cancel·lació. Feu servir la política de recuperació o d'idempotència de l'aplicació; aturar la feina local no desfà una acció remota.

Articles relacionats