Junior — Middle
Կարո՞ղ է դադարեցնել async-ով սկսված ասինխրոն ֆունկցիայի կատարմանը։
sobes.tech AI
Պատասխան AI-ից
Անցանցային ֆունկցիաները, որոնք սկսվում են async-ով, ինքնին հնարավոր չէ պարզապես «կտրվել» կամ «դադարեցնել» արտաքինից, քանի որ նրանք չեն աջակցում պարտադիր չեղարկմանը:
Android-ում (և ընդհանուր առմամբ C#-ում) անընդհատ գործողությունների չեղարկումը կառավարելու համար օգտագործվում է CancellationToken մեխանիզմը:
Ինչպես է դա աշխատում:
- CancellationToken օբյեկտը փոխանցվում է ֆունկցիային:
- Ֆունկցիայի ներսում պարբերաբար ստուգվում է տոքենի վիճակը (օրինակ, token.IsCancellationRequested):
- Եթե պահանջվում է չեղարկում, ֆունկցիան ճիշտ ավարտվում է՝ նետելով OperationCanceledException կամ պարզապես վերադարձնելով արդյունք:
Օրինակ՝
async Task DoWorkAsync(CancellationToken token)
{
for(int i = 0; i < 100; i++)
{
token.ThrowIfCancellationRequested();
await Task.Delay(100); // աշխատանքային սիմուլյացիա
}
}
// Օգտագործում
var cts = new CancellationTokenSource();
var task = DoWorkAsync(cts.Token);
// Չեղարկելու համար՝
cts.Cancel();
Այսպիսով, չեղարկումը համագործակցային գործընթաց է, և ֆունկցիան պետք է գրվի CancellationToken-ի աջակցությամբ։