Tugasan Tak Segerak dan Jenis Awaiter
Gabungkan tugasan tak segerak dengan jenis awaiter dan promise tersuai.
Tugasan Tak Segerak dan Jenis Awaiter ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Korutin Tak Segerak
Tugas tak segerak ditangguhkan semasa I/O dan disambung semula apabila operasi selesai. Gabungkan co_await dengan API tak segerak untuk menulis kod tak segerak tanpa panggilan balik.
Lakaran Jenis Task
Task membungkus korutin tak segerak. Task menyokong co_await untuk perantaian.
template <typename T>
struct Task {
struct promise_type;
std::coroutine_handle<promise_type> handle;
// ...
};Mekanisme co_await
Apabila pengkompil menemui co_await expr, pengkompil menjangka expr sebagai objek yang boleh ditunggu. Objek yang boleh ditunggu mempunyai tiga kaedah:
await_ready()— false untuk menangguhkan, true untuk melangkauawait_suspend(handle)— perkara yang perlu dilakukan semasa ditangguhkanawait_resume()— nilai yang diberikan kepada kod pemanggil
Contoh Objek Boleh Ditunggu: Sleep
Objek yang boleh ditunggu yang menjadualkan penyambungan semula selepas suatu kelewatan.
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 Boleh Ditunggu untuk HTTP
Pustaka menyediakan objek yang boleh ditunggu untuk permintaan HTTP, pemasa dan I/O fail. Gabungkannya seperti panggilan segerak.
Task<std::string> fetch() {
auto data = co_await http_get("/api/data");
co_return data;
}Menggubah Tugas
Menunggu satu tugas di dalam tugas lain merantaikan kedua-duanya. Tugas luar ditangguhkan sehingga tugas dalam selesai.
Task<int> outer() {
int x = co_await inner_a();
int y = co_await inner_b();
co_return x + y;
}Tugas Selari
Untuk kerja tak segerak secara selari, mulakan tugas tanpa menunggu setiap satunya dengan segera, kemudian tunggu kesemuanya.
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;
}Penyebaran Pengecualian
Pengecualian yang dilontarkan di dalam tugas tak segerak boleh ditangkap dalam unhandled_exception milik janji dan dilontarkan semula pada bahagian penunggu.
Pembatalan
Pustaka standard masih belum menyediakan primitif pembatalan. Pustaka seperti cppcoro dan boost.cobalt membina mekanisme sendiri — biasanya melalui token pembatalan atau sumber henti.
Penyepaduan Boost.Asio
Asio menyokong korutin secara natif. Gunakan co_await pada async_read, async_write dan operasi yang serupa. Inilah I/O tak segerak C++ yang paling bersih pada masa ini.
Prestasi
Penyambungan semula korutin jauh lebih murah daripada pertukaran utas. Pengkompil sering mengembangkan sebahagian mesin keadaan secara sebaris. Lakukan pemprofilan untuk mengesahkan bahawa susunan objek yang boleh ditunggu Anda dikompil dengan baik.
Hala Tuju Masa Hadapan
C++23 menambah std::generator serta beberapa penambahbaikan. C++26 mungkin membawa std::execution (penghantar/penerima) — rangka kerja tak segerak yang lebih umum dan saling beroperasi dengan korutin.
Semakan Pantas
Apakah tiga kaedah yang diperlukan oleh jenis objek yang boleh ditunggu?
Ulang Kaji
Tugas tak segerak menggabungkan co_await dengan objek yang boleh ditunggu untuk menulis kod tak segerak tanpa panggilan balik. Objek yang boleh ditunggu mempunyai await_ready, await_suspend dan await_resume. Pustaka seperti cppcoro dan Asio menyediakan jenis tugas serta objek yang boleh ditunggu yang sedia digunakan.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Tugasan Tak Segerak dan Jenis Awaiter” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Tugasan Tak Segerak dan Jenis Awaiter”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Tugasan Tak Segerak dan Jenis Awaiter”?
Gabungkan tugasan tak segerak dengan jenis awaiter dan promise tersuai. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Tugasan Tak Segerak dan Jenis Awaiter” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Konsep Coroutine: co_await, co_yield, co_return
- Melaksanakan Penjana Ringkas
- Tugasan Tak Segerak dan Jenis Awaiter
- Peruntukan Bingkai Coroutine