C++ Academy · Ders

Eşzamansız Görevler ve Awaiter Türleri

Özel awaiter ve promise türleriyle eşzamansız görevleri birleştirin

3. ders / 414 adım

Eşzamansız Görevler ve Awaiter Türleri, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Eşzamansız Korutinler

Eşzamansız bir görev G/Ç işlemi sırasında askıya alınır ve işlem tamamlandığında resume edilir. Geri çağırma içermeyen eşzamansız kod yazmak için co_await ile eşzamansız API'leri birleştirin.

Task Türü Taslağı

Bir Task, eşzamansız bir korutini sarar. Zincirleme için co_await desteği sağlar.

template <typename T>
struct Task {
    struct promise_type;
    std::coroutine_handle<promise_type> handle;
    // ...
};

co_await İşleyişi

Derleyici co_await expr ifadesini gördüğünde expr ifadesinin bir beklenebilir olmasını bekler. Beklenebilirin üç yöntemi vardır:

  • await_ready() — askıya almak için false, atlamak için true
  • await_suspend(handle) — askıya alınmışken yapılacak işlem
  • await_resume() — çağıran koda verilecek değer

Beklenebilir Örneği: Sleep

Bir gecikmeden sonra resume işlemi planlayan beklenebilir.

struct Sleep {
    std::chrono::milliseconds duration;
    bool await_ready() const { return false; }
    void await_suspend(std::coroutine_handle<> h) {
        std::thread([h, this] {
            std::this_thread::sleep_for(duration);
            h.resume();
        }).detach();
    }
    void await_resume() {}
};

Task<void> example() {
    co_await Sleep{500ms};
    std::cout << "after 500ms";
}

HTTP için Beklenebilir

HTTP istekleri, zamanlayıcılar ve dosya G/Ç'si için kütüphane tarafından sağlanan beklenebilirler. Bunları eşzamanlı çağrılar gibi birleştirin.

Task<std::string> fetch() {
    auto data = co_await http_get("/api/data");
    co_return data;
}

Görevleri Birleştirme

Bir görevi başka bir görevin içinde beklemek, görevleri birbirine zincirler. Dıştaki görev, içteki görev tamamlanana kadar askıya alınır.

Task<int> outer() {
    int x = co_await inner_a();
    int y = co_await inner_b();
    co_return x + y;
}

Paralel Görevler

Paralel eşzamansız işler için görevleri her birini hemen beklemeden başlatın, ardından hepsini bekleyin.

Task<int> sum_tasks() {
    auto a = inner_a();
    auto b = inner_b();
    int x = co_await a;
    int y = co_await b;
    co_return x + y;
}

Özel Durumların Yayılması

Eşzamansız bir görev içinde oluşturulan özel durumlar, promise nesnesinin unhandled_exception içinde yakalanabilir ve bekleyen tarafında yeniden oluşturulabilir.

İptal

Standart kütüphane henüz bir iptal ilkeli sağlamaz. Kütüphaneler (cppcoro, boost.cobalt) genellikle iptal belirteçleri veya durdurma kaynakları aracılığıyla kendi çözümlerini oluşturur.

Boost.Asio Tümleştirmesi

Asio, korutinleri yerel olarak destekler. async_read, async_write ve benzer işlemler üzerinde co_await kullanabilirsiniz. Günümüzdeki en temiz C++ eşzamansız G/Ç çözümüdür.

Performans

Korutini resume etmek, iş parçacığı değiştirmekten çok daha ucuzdur. Derleyici çoğu zaman durum makinesinin bölümlerini satır içine yerleştirir. Beklenebilir yığınınızın sorunsuz derlendiğini doğrulamak için profil çıkarın.

Gelecekteki Yönelimler

C++23, std::generator türünü ve çeşitli iyileştirmeleri ekledi. C++26, korutinlerle birlikte çalışabilen daha genel bir eşzamansız çerçeve olan std::execution (gönderici/alıcı) desteğini getirebilir.

Hızlı Kontrol

Bir beklenebilir türünün ihtiyaç duyduğu üç yöntem hangileridir?

Özet

Eşzamansız görevler, geri çağırma içermeyen eşzamansız kod yazmak için co_await ile beklenebilirleri birleştirir. Beklenebilirlerde await_ready, await_suspend ve await_resume bulunur. Kütüphaneler (cppcoro, Asio) hazır görev ve beklenebilir türleri sağlar.

Başlamak ücretsiz

Yapay zeka eğitmeniyle C++ öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Eşzamansız Görevler ve Awaiter Türleri” dersi ücretsiz mi?

Evet — “Eşzamansız Görevler ve Awaiter Türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Eşzamansız Görevler ve Awaiter Türleri” dersinde ne öğreneceğim?

Özel awaiter ve promise türleriyle eşzamansız görevleri birleştirin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Eşzamansız Görevler ve Awaiter Türleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Coroutine Kavramları: co_await, co_yield, co_return
  2. Basit Bir Üreteç Uygulama
  3. Eşzamansız Görevler ve Awaiter Türleri
  4. Coroutine Çerçevesi Ayırma
← C++ Academy Sayfasına Dön