Tugas Asinkron dan Tipe Awaiter
Gabungkan tugas asinkron dengan tipe awaiter dan promise kustom
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 penangguhanawait_suspend(handle)— tindakan yang dilakukan selama penangguhanawait_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.
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
- Konsep Coroutine: co_await, co_yield, co_return
- Mengimplementasikan Generator Sederhana
- Tugas Asinkron dan Tipe Awaiter
- Alokasi Kerangka Coroutine