Skicka deadlinen till den åtgärd som kan avbryta nätverksarbetet. För en befintlig proxykonfigurerad .NET HttpClient:

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

Programmet tillhandahåller client och uri. Denna överlagring tar emot avbrottstokenet; en timeout kring väntan på dess uppgift skulle bara begränsa just den anropandes väntan. Att polla en slutförandeflagga har samma problem: den anropande kan gå medan sockets och arbetare förblir upptagna.

Avbrott följer klientens implementering och städväg. Det lovar inte att varje lägre åtgärd stoppar vid en exakt instruktion. Låt den vägen slutföras och frigör de resurser som åtgärden äger. Inkludera separat styrd body-läsning i designen; för en modern .NET ResponseHeadersRead-åtgärd skickas samma token genom body-läsningen. Andra klienter erbjuder egna gränssnitt för avbrott, avbrytning och städning.

Ett nytt försök behöver ett utfall för det föregående försöket. Behåll identifieraren och den valda proxyn, begär avbrott när det behövs och undvik att tappa uppgiften medan ersättare startas oändligt. Annars kan en långsam slutpunkt samla arbete snabbare än programmet frigör det.

Det externa utfallet kräver separat hantering. Målet kan redan ha tagit emot en insändning när avbrottet sker. Använd programmets återhämtnings- eller idempotenspolicy; att stoppa lokalt arbete ångrar inte en extern åtgärd.

Relaterade artiklar