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 навишта шавад.