Middle
Kako funkcioniše mehanizam async/await u C#?
sobes.tech АИ
Одговор од АИ
Механизам async/await омогућава писање асинхроног кода који изгледа као синхрона.
- Кључна реч
async: Означава метод као асинхрона. Тај метод може садржати инструкцијуawait. - Кључна реч
await: Користи се пре позива асинхроне операције (обично метода која враћаTaskилиTask<T>). Када се извршавање доведе доawait, контролу се враћа позивајућој методи, а ослобођени нит може извршавати другу радњу. Task/Task<T>: Представља обећање о завршетку асинхроне операције и њеном резултату (заTask<T>).await"чека" завршетак овог "обећања".- Машина стања: Компилатор претвара асинхрони метод у машину стања. Ова машина чува стање метода при достижењу
await. - Наставак: Када се очекивани задатак заврши, окружење за извршавање планира извршавање преосталог дела асинхроног метода (наставка) на нит из пул-а или у истом синхронизованом контексту ако је ухваћен.
- Повратак контроле: Након што асинхрона операција заврши, контролa се враћа на тачку после
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)
{
// Await чека да се GetLengthAsync заврши
// UI нитка није блокирана
int length = await GetLengthAsync("https://example.com");
// Ажурирање UI елемента
Label1.Text = $"Дужина садржаја: {length}";
}