.NET HttpClient ಹೆಡರ್ಗಳು ಮತ್ತು ಬಾಡಿಗೆ ಒಂದೇ CancellationToken ಬಳಸಿ
ಕರೆಮಾಡುವವರ ಕಾಯುವಿಕೆಯನ್ನು ಮಾತ್ರ ಅಳೆಯುವ ಬದಲು, ವಿನಂತಿಯ CancellationToken ಅನ್ನು HttpClient ಪ್ರತಿಕ್ರಿಯೆ ಸಿದ್ಧತೆ ಮತ್ತು ಬಾಡಿ ಓದುವಿಕೆ ಎರಡಕ್ಕೂ ರವಾನಿಸಿ.
HTTP ವಿನಂತಿ ಮುಂದುವರಿಯುತ್ತಿರುವಾಗ ಸ್ಟಾಪ್ವಾಚ್ ಕಾಯುವಿಕೆಯನ್ನು ನಿಲ್ಲಿಸಬಹುದು. ಪ್ರಾಕ್ಸಿ ಮೂಲಕದ ಪ್ರಯತ್ನಕ್ಕೆ ಉದ್ದೇಶಿತ ಬಜೆಟ್ ಇದ್ದಾಗ ಕಾರ್ಯಾಚರಣೆಗೇ ರದ್ದತಿ ನೀಡಿ.
ಇರುವ ಪ್ರಾಕ್ಸಿಗೆ ಸಂರಚಿಸಿದ HttpClient ಹೊಂದಿರುವ ಆಧುನಿಕ .NET ಅಪ್ಲಿಕೇಶನ್ಗಾಗಿ:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
targetUrl,
HttpCompletionOption.ResponseHeadersRead,
budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);
ಅದೇ ಬಜೆಟ್ ಸಿದ್ಧತೆಯ ಮೊದಲು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಬಾಡಿ ಓದುವ ಸಮಯದಲ್ಲಿ ಸಕ್ರಿಯವಾಗಿರುತ್ತದೆ. ResponseHeadersRead ಹೆಡರ್ಗಳ ನಂತರ ನಿಯಂತ್ರಣವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ HttpClientನ ಸ್ವಂತ ಪೂರ್ಣಗೊಳಿಸುವ ಸಮಯಮಿತಿಯು ನಂತರದ ಬಾಡಿ-ಓದುವ ಬಜೆಟ್ ಅನ್ನು ತಾನೇ ನಿರ್ಧರಿಸುವುದಿಲ್ಲ.
ರದ್ದತಿಯನ್ನು HTTP ಸ್ಥಿತಿ ಮತ್ತು ಸಾಗಣೆ ದೋಷಗಳಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿ. OperationCanceledException ಒದಗಿಸಿದ ಟೋಕನ್ನಿಂದ ಅಥವಾ ಇನ್ನೊಂದು ಸಂರಚಿತ ಸಮಯಮಿತಿಯಿಂದ ಬರಬಹುದು; ಪ್ರತಿ ವೈಫಲ್ಯವನ್ನು ಸತ್ತ ಪ್ರಾಕ್ಸಿ ಎಂದು ವರದಿ ಮಾಡುವ ಬದಲು ಅನ್ವಯವಾಗುವ ರದ್ದತಿ ಮೂಲವನ್ನು ಪರಿಶೀಲಿಸಿ.
ಈ ಪ್ರಾಕ್ಸಿ ಮಾರ್ಗವನ್ನು ಹೊಂದಿರುವ ಕ್ಲೈಂಟ್ ಅನ್ನು ಮರುಬಳಸಿ. ಪ್ರಯತ್ನವನ್ನು ರದ್ದುಗೊಳಿಸುವುದು ಪ್ರತಿ ನಂತರದ ವಿನಂತಿಗೆ ಇಡೀ ಸಂಪರ್ಕ ಪೂಲ್ ಅನ್ನು ಮರುನಿರ್ಮಿಸುವುದು ಎಂದರ್ಥವಲ್ಲ.
ಉದಾಹರಣೆಯು ಸೀಮಿತ ಪ್ರತಿಕ್ರಿಯೆ ಬಾಡಿಯನ್ನು ಬಫರ್ ಮಾಡುತ್ತದೆ. ಸ್ಟ್ರೀಮಿಂಗ್ ಡೌನ್ಲೋಡ್ ಟೋಕನ್ ಅನ್ನು ತನ್ನ ಸ್ಟ್ರೀಮ್-ನಕಲು ಲೂಪ್ ಮೂಲಕ ರವಾನಿಸಬೇಕು ಮತ್ತು ಪ್ರತಿ ನಿರ್ಗಮನ ಮಾರ್ಗದಲ್ಲಿ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಬಿಡುಗಡೆ ಮಾಡಬೇಕು.
ರದ್ದತಿ ಕಾರ್ಯಾಚರಣಾ ನೀತಿಯನ್ನು ವ್ಯಕ್ತಪಡಿಸುತ್ತದೆ, ಪ್ರತಿ ಆಧಾರವಾಗಿರುವ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಕ್ರಿಯೆಗೆ ನಿಖರವಾದ ವಾಲ್-ಕ್ಲಾಕ್ ಭರವಸೆ ಅಲ್ಲ. Task.IsCompleted ಮೇಲಿನ ಅಂತ್ಯವಿಲ್ಲದ ಪೋಲಿಂಗ್ ಲೂಪ್ನಿಂದ ಅದನ್ನು ಬದಲಿಸುವುದನ್ನು ತಪ್ಪಿಸಿ.