Kami memiliki fungsi yang dipanggil oleh satu utas (kami beri nama ini utas utama). Di dalam tubuh fungsi kita menelurkan beberapa utas pekerja untuk melakukan pekerjaan intensif CPU, tunggu sampai semua utas selesai, lalu kembalikan hasilnya ke utas utama.
Hasilnya adalah pemanggil dapat menggunakan fungsi tersebut secara naif, dan secara internal akan menggunakan beberapa inti.
Sejauh ini semuanya baik-baik saja ..
Masalah yang kami hadapi adalah tentang pengecualian. Kami tidak ingin pengecualian pada utas pekerja membuat aplikasi mogok. Kami ingin pemanggil ke fungsi tersebut dapat menangkap mereka di utas utama. Kita harus menangkap pengecualian pada utas pekerja dan menyebarkannya ke utas utama agar mereka terus melepaskannya dari sana.
Bagaimana kita bisa melakukan ini?
Yang terbaik yang bisa saya pikirkan adalah:
- Tangkap berbagai macam pengecualian pada utas pekerja kita (std :: exception dan beberapa milik kita sendiri).
- Catat jenis dan pesan pengecualiannya.
- Memiliki pernyataan sakelar yang sesuai di utas utama yang memunculkan kembali pengecualian dari jenis apa pun yang direkam di utas pekerja.
Ini memiliki kerugian yang jelas karena hanya mendukung serangkaian jenis pengecualian terbatas, dan akan memerlukan modifikasi setiap kali jenis pengecualian baru ditambahkan.