Sobes.tech
Middle

C# да async/await механизми кандай иштейт?

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}"; 
}