std::async
- C++ kursu
- İleri seviye
- Ders 22/83
- 5 dk
std::async ile asenkron görev öğrenirsin.
std::async
std::async, bir fonksiyonu arka plan iş parçacığında çalıştırır ve sonucu std::future olarak döndürür. Sözdizimi: auto f = std::async(std::launch::async, func);. func ayrı bir iş parçacığında başlar; f.get() sonucu bekler.
std::launch::async hemen başlatmayı, std::launch::deferred ise get çağrılana dek ertelemeyi belirtir. Varsayılan std::launch::async | std::launch::deferred uygulamaya bırakır; genellikle std::launch::async açıkça verilir. async, ham std::thread'den daha yüksek seviyelidir; dönüş değeri taşır ve istisnaları iletir.
Dönüş değeri
std::async'in dönüş türü std::future<R>'dir; burada R fonksiyonun dönüş türüdür. int compute() için std::future<int> döner. Sonuç f.get() ile alınır; bu çağrı, fonksiyon bitene kadar bekler.
Eğer fonksiyon istisna fırlatırsa, bu istisna future'da saklanır ve get çağrıldığında yeniden fırlatılır. Bu, ham std::thread'de olmayan bir yetenektir; thread ile istisna fırlatıldığında std::terminate çağrılır. async, bu yüzden hata yönetimi için daha güvenlidir.
Uygulama async ile compute
int compute() yaz; gövdede return 42; olsun. main içinde auto f = std::async(std::launch::async, compute); ile başlat ve std::cout << f.get(); ile sonucu yazdır. <future> başlığını ekle.
Başlangıç kodu
#include <iostream>
#include <future>
// compute fonksiyonunu yaz
int main() {
// async ile başlat ve sonucu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <future>
int compute() {
return 42;
}
int main() {
auto f = std::async(std::launch::async, compute);
std::cout << f.get();
return 0;
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İfadeyi rolüne eşle
| Kavram | Anlamı |
|---|---|
std::async(std::launch::async, func) |
Arka plan başlat |
std::launch::async |
Hemen başlat |
std::launch::deferred |
Ertele |
auto f = ... |
Future sonucu |
2 async satırını tamamla
auto f = std::____(std::launch::async, compute);
auto f = std::async(std::launch::async, compute);
Açıklama: std::async, fonksiyonu arka planda çalıştırır.
3 std::async ne döndürür?
- std::thread
- std::future Doğru cevap
- std::function
- std::promise
Açıklama: std::async sonucu std::future olarak döndürür.