Ακύρωση αιτήματος .NET HttpClient μέσω διακομιστή μεσολάβησης με διακριτικό προθεσμίας
Ακυρώστε την ίδια τη δικτυακή λειτουργία όταν λήγει η προθεσμία του διακομιστή μεσολάβησης, αντί να περιορίζετε μόνο την αναμονή του καλούντος.
Περάστε την προθεσμία στη λειτουργία που μπορεί να ακυρώσει τη δικτυακή εργασία. Για ένα υπάρχον .NET HttpClient ρυθμισμένο μέσω διακομιστή μεσολάβησης:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Η εφαρμογή παρέχει client και uri. Αυτή η υπερφόρτωση δέχεται το διακριτικό ακύρωσης· ένα χρονικό όριο γύρω από την αναμονή της εργασίας του θα περιόριζε μόνο την αναμονή αυτού του καλούντος. Η δημοσκόπηση μιας σημαίας ολοκλήρωσης έχει το ίδιο πρόβλημα: ο καλών μπορεί να φύγει ενώ οι υποδοχές και οι εργάτες παραμένουν απασχολημένοι.
Η ακύρωση ακολουθεί την υλοποίηση του πελάτη και τη διαδρομή εκκαθάρισης. Δεν υπόσχεται ότι κάθε ενέργεια χαμηλότερου επιπέδου σταματά σε ακριβή εντολή. Αφήστε αυτή τη διαδρομή να ολοκληρωθεί και απελευθερώστε τους πόρους που κατέχει η λειτουργία. Συμπεριλάβετε στον σχεδιασμό την ξεχωριστά ελεγχόμενη ανάγνωση του σώματος· για μια σύγχρονη λειτουργία .NET ResponseHeadersRead, περάστε το ίδιο διακριτικό μέσα από την ανάγνωση του σώματος. Άλλοι πελάτες παρέχουν τις δικές τους διεπαφές ακύρωσης, ματαίωσης και εκκαθάρισης.
Μια επανάληψη χρειάζεται αποτέλεσμα για την προηγούμενη προσπάθεια. Διατηρήστε το αναγνωριστικό της και τον επιλεγμένο διακομιστή μεσολάβησης, ζητήστε ακύρωση όταν χρειάζεται και αποφύγετε να χάσετε την εργασία ξεκινώντας αντικαταστάτες επ' αόριστον. Διαφορετικά ένα αργό τελικό σημείο μπορεί να συσσωρεύσει εργασία γρηγορότερα απ' ό,τι την απελευθερώνει η εφαρμογή.
Το απομακρυσμένο αποτέλεσμα χρειάζεται ξεχωριστό χειρισμό. Ο προορισμός μπορεί να έχει ήδη λάβει μια υποβολή όταν συμβεί η ακύρωση. Χρησιμοποιήστε την πολιτική ανάκτησης ή αδυναμίας επανάληψης της εφαρμογής· η διακοπή της τοπικής εργασίας δεν αναιρεί μια απομακρυσμένη ενέργεια.