Sobes.tech
Middle

Πώς λειτουργεί μια ασύγχρονη μέθοδος σε C#;

sobes.tech AI

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

Η ασύγχρονη μέθοδος σε C# επιτρέπει την εκτέλεση λειτουργιών που μπορεί να διαρκέσουν μεγάλο χρονικό διάστημα (π.χ. εισαγωγή/εξαγωγή, αιτήματα δικτύου) χωρίς να μπλοκάρει το κύριο νήμα εκτέλεσης.

Όταν καλείται μια ασύγχρονη μέθοδος που έχει χαρακτηριστεί με τη λέξη-κλειδί async, ο έλεγχος μεταβιβάζεται στον κώδικα που την καλεί μέχρι να ολοκληρωθεί η ασύγχρονη λειτουργία. Η λειτουργία εκτελείται στο παρασκήνιο (π.χ. χρησιμοποιώντας μια ομάδα νημάτων ή μηχανισμούς εισόδου/εξόδου του συστήματος).

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

Το αποτέλεσμα της ασύγχρονης λειτουργίας (ή μια εξαίρεση) επιστρέφεται στη συνέχεια της ασύγχρονης μεθόδου, όπου επεξεργάζεται. Η κατάσταση της ασύγχρονης μεθόδου διαχειρίζεται αυτόματα από τον μεταγλωττιστή C#, ο οποίος τη μετατρέπει σε ένα τελικό αυτόματο.

public async Task<string> GetDataAsync(string url)
{
    // Προσομοίωση μιας μακράς λειτουργίας εισόδου/εξόδου
    using (var httpClient = new HttpClient())
    {
        string result = await httpClient.GetStringAsync(url); // await: η εκτέλεση της μεθόδου μπορεί να διακοπεί
        return result;
    }
}

// Παράδειγμα κλήσης ασύγχρονης μεθόδου
public async Task ProcessDataAsync(string url)
{
    Console.WriteLine("Έναρξη φόρτωσης δεδομένων...");
    string data = await GetDataAsync(url); // Αναμονή για την ολοκλήρωση της ασύγχρονης λειτουργίας
    Console.WriteLine("Δεδομένα φορτώθηκαν: " + data.Length + " χαρακτήρες.");
}