.NET HttpClient-kérés megszakítása proxyn keresztül határidő-token használatával
A hálózati műveletet magát szakítsa meg, amikor a proxy határideje lejár, ne csak a hívó várakozását korlátozza.
Adja át a határidőt annak a műveletnek, amely meg tudja szakítani a hálózati munkát. Egy meglévő, proxyn keresztül beállított .NET HttpClient esetén:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Az alkalmazás client és uri értéket ad. Ez a túlterhelés megkapja a megszakítási tokent; a feladatára való várakozás körüli időkorlát csak az adott hívó várakozását korlátozná. Egy befejezési jelző lekérdezése ugyanezt a problémát hordozza: a hívó elmehet, miközben a socketek és a munkaszálak foglaltak maradnak.
A megszakítás a kliens megvalósítását és tisztítási útvonalát követi. Nem ígéri, hogy minden alacsonyabb szintű művelet pontos utasításnál megáll. Engedje befejeződni ezt az útvonalat, és szabadítsa fel a művelet által birtokolt erőforrásokat. A tervezésbe foglalja bele a külön szabályozott törzsolvasást; egy modern .NET ResponseHeadersRead-műveletnél ugyanazt a tokent adja át a törzs olvasásán. Más kliensek saját megszakítási, megszakító és tisztítási felületeket kínálnak.
Egy újrapróbálkozásnak eredményre van szüksége az előző kísérlethez. Őrizze meg annak azonosítóját és a kiválasztott proxyt, kérjen megszakítást, amikor kell, és kerülje a feladat elvesztését, miközben vég nélkül indít helyettesítőket. Különben egy lassú végpont gyorsabban halmozhat fel munkát, mint ahogy az alkalmazás felszabadítja.
A távoli eredmény külön kezelést igényel. Elképzelhető, hogy a cél már kapott beküldést, amikor a megszakítás megtörténik. Használja az alkalmazás helyreállítási vagy idempotencia-szabályzatát; a helyi munka leállítása nem vonja vissza a távoli műveletet.