Sobes.tech
Junior

Πώς χρησιμοποιείται η λέξη-κλειδί await σε C#;

sobes.tech AI

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

Η λέξη-κλειδί await χρησιμοποιείται στη C# για να περιμένει με μη μπλοκαριστικό τρόπο την ολοκλήρωση μιας ασύγχρονης λειτουργίας.

Η χρήση του await είναι δυνατή μόνο μέσα σε ασύγχρονες μεθόδους που έχουν χαρακτηριστεί με τον τροποποιητή async.

Όταν η εκτέλεση φτάσει στη δήλωση await, η ροή ελέγχου επιστρέφει στον καλούντα και η μέθοδος "παραμένει σε αναστολή" μέχρι να ολοκληρωθεί η αναμενόμενη εργασία. Μετά την ολοκλήρωση της εργασίας, η εκτέλεση της μεθόδου συνεχίζεται από το σημείο όπου είχε σταματήσει.

Αυτό επιτρέπει την απελευθέρωση του νήματος που κάλεσε (π.χ. το νήμα διεπαφής χρήστη ή το νήμα διακομιστή web) για την εκτέλεση άλλων εργασιών, βελτιώνοντας την ανταπόκριση και την κλιμάκωση της εφαρμογής.

public async Task<string> GetDataAsync()
{
    // Προσομοίωση μιας μακράς ασύγχρονης λειτουργίας
    await Task.Delay(2000);
    return "Δεδομένα λήφθηκαν";
}

public async Task ProcessDataAsync()
{
    Console.WriteLine("Έναρξη επεξεργασίας...");
    string result = await GetDataAsync(); // Περιμένει την ολοκλήρωση του GetDataAsync χωρίς μπλοκάρισμα
    Console.WriteLine($"Αποτέλεσμα: {result}");
    Console.WriteLine("Η επεξεργασία ολοκληρώθηκε.");
}

Η λέξη-κλειδί await μπορεί να εφαρμοστεί σε:

  1. Εργασίες (Task, Task<T>, ValueTask, ValueTask<T>): πιο συνηθισμένο σενάριο.
  2. τύπους awaitable: αντικείμενα που έχουν τη μέθοδο GetAwaiter(), η οποία επιστρέφει τύπο με τις μεθόδους IsCompleted, GetResult() και OnCompleted() (για υποστήριξη συνέχειας).

Η χρήση του await καθιστά τον ασύγχρονο κώδικα πιο ευανάγνωστο και παρόμοιο με τον συγχρονικό, εξαλείφοντας την ανάγκη για χειροκίνητη γραφή κώδικα συνέχειας ή χρήση callbacks.