Sobes.tech
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-ի աջակցությամբ։