Middle
როგორ მუშაობს async/await მექანიზმი C#-ში?
sobes.tech AI
პასუხი AI-სგან
async/await მექანიზმი საშუალებას აძლევს დაწეროთ ასინქრონული კოდი, რომელიც გამოიყურება როგორც სინქრონული.
- საკვანძო სიტყვა
async: აღნიშნავს მეთოდს როგორც ასინქრონულს. ასეთი მეთოდი შეიძლება შეიცავდესawaitოპერატორს. - საკვანძო სიტყვა
await: გამოიყენება ასინქრონული ოპერაციის (სადაც ჩვეულებრივ მეთოდი აბრუნებსTaskანTask<T>) გამოძახებისას. როდესაც შესრულება მიემართებაawait-ს, კონტროლი გადადის გამოძახებულ მეთოდზე, ხოლო თავისუფალი ნაკადი შეიძლება განახორციელოს სხვა სამუშაო. Task/Task<T>: წარმოადგენს დაპირებას ასინქრონული ოპერაციის დასრულებისა და მისი შედეგის (თუTask<T>) შესახებ.await"მოსალოდნელად" ელოდება ამ "დაპირების" დასრულებას.- მექანიზმის მდგომარეობა: კომპილატორი გარდაქმნის ასინქრონულ მეთოდს ფინალურ ავტომატად. ეს ავტომატი ინახავს მეთოდის მდგომარეობას
await-ს მიღწევისას. - განაგრძობა: როდესაც ელოდება დავალება დასრულდება, გარემო განახორციელებს ასინქრონული მეთოდის დარჩენილი ნაწილის (განაგრძობა) შესრულებას პულიდან ან იმავე სინქრონიზაციის კონტექსტში, თუ ის დაიჭირეს.
- მართვის დაბრუნება: ასინქრონული ოპერაციის დასრულების შემდეგ, მართვა დაბრუნდება
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}";
}