Sobes.tech
Middle

როგორ მუშაობს async/await მექანიზმი C#-ში?

sobes.tech AI

პასუხი AI-სგან

async/await მექანიზმი საშუალებას აძლევს დაწეროთ ასინქრონული კოდი, რომელიც გამოიყურება როგორც სინქრონული.

  1. საკვანძო სიტყვა async: აღნიშნავს მეთოდს როგორც ასინქრონულს. ასეთი მეთოდი შეიძლება შეიცავდეს await ოპერატორს.
  2. საკვანძო სიტყვა await: გამოიყენება ასინქრონული ოპერაციის (სადაც ჩვეულებრივ მეთოდი აბრუნებს Task ან Task<T>) გამოძახებისას. როდესაც შესრულება მიემართება await-ს, კონტროლი გადადის გამოძახებულ მეთოდზე, ხოლო თავისუფალი ნაკადი შეიძლება განახორციელოს სხვა სამუშაო.
  3. Task / Task<T>: წარმოადგენს დაპირებას ასინქრონული ოპერაციის დასრულებისა და მისი შედეგის (თუ Task<T>) შესახებ. await "მოსალოდნელად" ელოდება ამ "დაპირების" დასრულებას.
  4. მექანიზმის მდგომარეობა: კომპილატორი გარდაქმნის ასინქრონულ მეთოდს ფინალურ ავტომატად. ეს ავტომატი ინახავს მეთოდის მდგომარეობას await-ს მიღწევისას.
  5. განაგრძობა: როდესაც ელოდება დავალება დასრულდება, გარემო განახორციელებს ასინქრონული მეთოდის დარჩენილი ნაწილის (განაგრძობა) შესრულებას პულიდან ან იმავე სინქრონიზაციის კონტექსტში, თუ ის დაიჭირეს.
  6. მართვის დაბრუნება: ასინქრონული ოპერაციის დასრულების შემდეგ, მართვა დაბრუნდება await-ის შემდეგ წერტილში, და მეთოდი განაგრძობს შენახულ მდგომარეობასთან.
// ასინქრონული მეთოდი
async Task<int> GetLengthAsync(string url)
{
    // HTTP-კლიენტის შექმნა
    using var client = new HttpClient(); 
    // ასინქრონული მოთხოვნის გაგზავნა URL-ზე
    // `await` ელოდება მოთხოვნის დასრულებას, არ ბლოკავს ნაკადს
    string content = await client.GetStringAsync(url); 
    // განაგრძობა შესრულებას მიღებული კონტენტის შემდეგ
    return content.Length; 
}

// ასინქრონული მეთოდის გამოყენება
async void Button_Click(object sender, EventArgs e)
{
    // ელოდება GetLengthAsync-ის დასრულებას
    // UI ნაკადი არ ბლოკირდება
    int length = await GetLengthAsync("https://example.com"); 
    // UI ელემენტის განახლება
    Label1.Text = $"კონტენტის სიგრძე: {length}"; 
}