Sobes.tech
Junior — Middle

Μπορεί κανείς να διακόψει την εκτέλεση μιας ασύγχρονης λειτουργίας που ξεκίνησε μέσω async;

sobes.tech AI

Απάντηση από AI

Οι ασύγχρονες συναρτήσεις, που ξεκινούν μέσω async, δεν μπορούν απλώς να «διακοπούν» ή «σταματήσουν» από το εξωτερικό, καθώς δεν υποστηρίζουν την αναγκαστική ακύρωση.

Για τη διαχείριση της ακύρωσης των ασύγχρονων λειτουργιών στο Android (και γενικά στο C#), χρησιμοποιείται ο μηχανισμός CancellationToken.

Πώς λειτουργεί:

  • Ένα αντικείμενο CancellationToken περνάει στη συνάρτηση.
  • Μέσα στη συνάρτηση, ελέγχεται περιοδικά η κατάσταση του token (π.χ., 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.