.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 ကို အဆုံးမဲ့ စစ်ဆေးနေသော ကွင်းဆက်ဖြင့် အစားမထိုးပါနှင့်။