C++ Academy · Pelajaran

Tugas Asinkron dan Tipe Awaiter

Gabungkan tugas asinkron dengan tipe awaiter dan promise kustom

Pelajaran 3 dari 414 langkah

Tugas Asinkron dan Tipe Awaiter adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Korutin Asinkron

Tugas asinkron ditangguhkan saat melakukan I/O dan dilanjutkan ketika operasi selesai. Gabungkan co_await dengan API asinkron untuk menulis kode asinkron tanpa panggilan balik.

Sketsa Tipe Task

Task membungkus korutin asinkron. Task mendukung co_await untuk perangkaian.

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

Mekanisme co_await

Saat kompiler menemukan co_await expr, kompiler mengharapkan expr berupa objek yang dapat ditunggu. Objek yang dapat ditunggu memiliki tiga metode:

  • await_ready() — false untuk menangguhkan, true untuk melewati penangguhan
  • await_suspend(handle) — tindakan yang dilakukan selama penangguhan
  • await_resume() — nilai yang diberikan kepada kode pemanggil

Contoh Objek yang Dapat Ditunggu: Sleep

Objek yang dapat ditunggu yang menjadwalkan pelanjutan setelah jeda.

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

Objek yang Dapat Ditunggu untuk HTTP

Objek yang dapat ditunggu yang disediakan pustaka untuk permintaan HTTP, pengatur waktu, dan I/O berkas. Susun objek tersebut seperti pemanggilan sinkron.

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

Menyusun Tugas

Menunggu satu tugas di dalam tugas lain merangkai keduanya. Tugas luar ditangguhkan hingga tugas dalam selesai.

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

Tugas Paralel

Untuk pekerjaan asinkron paralel, mulai tugas tanpa langsung menunggu masing-masing tugas, lalu tunggu semuanya.

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

Penerusan Pengecualian

Pengecualian yang dilemparkan di dalam tugas asinkron dapat ditangkap dalam promise melalui unhandled_exception dan dilemparkan kembali di sisi penunggu.

Pembatalan

Pustaka standar belum menyediakan primitif pembatalan. Pustaka seperti cppcoro dan boost.cobalt membuat implementasinya sendiri—biasanya melalui token pembatalan atau sumber penghentian.

Integrasi Boost.Asio

Asio mendukung korutin secara bawaan. Gunakan co_await pada async_read, async_write, dan operasi serupa. Inilah cara paling bersih untuk I/O asinkron C++ saat ini.

Kinerja

Pelanjutan korutin jauh lebih murah daripada pergantian utas. Kompiler sering melakukan inlining pada bagian-bagian mesin keadaan. Buat profil untuk memastikan rangkaian objek yang dapat ditunggu Anda dikompilasi dengan baik.

Arah Mendatang

C++23 menambahkan std::generator dan berbagai penyempurnaan. C++26 mungkin menghadirkan std::execution (pengirim/penerima)—kerangka kerja asinkron yang lebih umum dan dapat berinteroperasi dengan korutin.

Pemeriksaan Singkat

Tiga metode apa yang diperlukan oleh tipe objek yang dapat ditunggu?

Ringkasan

Tugas asinkron menggabungkan co_await dengan objek yang dapat ditunggu untuk menulis kode asinkron tanpa panggilan balik. Objek yang dapat ditunggu memiliki await_ready, await_suspend, dan await_resume. Pustaka seperti cppcoro dan Asio menyediakan tipe tugas dan objek yang dapat ditunggu siap pakai.

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tugas Asinkron dan Tipe Awaiter” gratis?

Ya — teks lengkap “Tugas Asinkron dan Tipe Awaiter” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tugas Asinkron dan Tipe Awaiter”?

Gabungkan tugas asinkron dengan tipe awaiter dan promise kustom Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Tugas Asinkron dan Tipe Awaiter” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Konsep Coroutine: co_await, co_yield, co_return
  2. Mengimplementasikan Generator Sederhana
  3. Tugas Asinkron dan Tipe Awaiter
  4. Alokasi Kerangka Coroutine
← Kembali ke C++ Academy