Middle
C# да async/await механизми кандай иштейт?
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}";
}