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)
{
// Await чека да се заврши GetLengthAsync
// UI нишката не се блокира
int length = await GetLengthAsync("https://example.com");
// Ажурирање на UI елемент
Label1.Text = $"Должина на содржината: {length}";
}