C++
Task type
Task ve promise type öğrenirsin.
Task ve promise type
Bir Task türü, coroutine'in dönüş türüdür ve içinde bir promise_type içerir. promise_type, coroutine'in başlama, bitirme ve değer döndürme davranışını tanımlar.
Bir promise_type'ın zorunlu üyeleri şunlardır: get_return_object (Task nesnesini üretir), initial_suspend (başlangıçta askıya alma), final_suspend (bitişte askıya alma), return_void veya return_value (bitirme) ve unhandled_exception (hata). Bu üyeler, coroutine'in iskeletini oluşturur. Eksik olursa derleme hatası alırsın.
Askıya alma üyeleri
initial_suspend ve final_suspend, coroutine'in başında ve sonunda ne olduğunu belirler. std::suspend_never dönerse coroutine hemen çalışır; std::suspend_always dönerse askıya alınır.
Bir Task çoğunlukla initial_suspend için suspend_never (hemen başla) ve final_suspend için suspend_always (çerçeveyi yaşat) kullanır. Böylece coroutine başlar, değer üretir ve bittiğinde çerçeve kalır; dışarıdan okunabilir. noexcept ile de işaretlenirler çünkü final_suspend istisna fırlatmamalıdır.
Uygulama Task promise_type tamamla
promise_type içine std::suspend_never initial_suspend() { return {}; } ve std::suspend_never final_suspend() noexcept { return {}; } üyelerini ekle. main içindeki kod hazırdır; dokunma.
Örnek çözümü göster
#include <iostream>
#include <coroutine>
struct Task {
struct promise_type {
Task get_return_object() { return {std::coroutine_handle<promise_type>::from_promise(*this)}; }
std::suspend_never initial_suspend() { return {}; }
std::suspend_never final_suspend() noexcept { return {}; }
void return_void() { }
void unhandled_exception() { }
};
std::coroutine_handle<promise_type> handle;
};
Task run() {
co_return;
}
int main() {
run();
std::cout << "Task testi geçti";
return 0;
}
Kendini test et
-
promise_type üyesi
struct promise_type { Task ____() { return {}; } };
Cevabı göster
struct promise_type { Task get_return_object() { return {}; } };
-
promise_type ne yapar?
- Coroutine'in hızını artırır
- Coroutine'i siler
- Coroutine'in başlama, bitirme ve değer döndürme davranışını tanımlar
- Coroutine'in parametrelerini sayar
Cevabı göster
Coroutine'in başlama, bitirme ve değer döndürme davranışını tanımlar — promise_type, coroutine'in davranış sözleşmesini tanımlar.
-
Üyeyi rolüne eşle
- get_return_object
- Task nesnesini üretir
- initial_suspend
- Başlangıç askısı
- final_suspend
- Bitiş askısı
- unhandled_exception
- Hata yakalama
Sıradaki ders: Özet - Coroutines