.NET HttpClient හි ශීර්ෂ සහ බඳ සඳහා එකම CancellationToken එකක් භාවිත කරන්න
HttpClient ප්රතිචාරය සූදානම් කිරීමේදී සහ බඳ කියවීමේදී ඉල්ලීමේ CancellationToken එක ගෙනයන්න; ඇමතුම්කරුගේ රැඳීම පමණක් කාලය මනින්න එපා.
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 මත අන්ත නැති සමීක්ෂණ ලූපයක් තබා එය ප්රතිස්ථාපනය නොකරන්න.