Kelas structured_task_group
Kelas ini structured_task_group
mewakili kumpulan pekerjaan paralel yang sangat terstruktur. Anda dapat mengantrekan tugas paralel individual ke objek yang structured_task_group
menggunakan task_handle
, dan menunggunya selesai, atau membatalkan grup tugas sebelum selesai dieksekusi, yang akan membatalkan tugas apa pun yang belum dimulai eksekusi.
Sintaks
class structured_task_group;
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
structured_task_group | Kelebihan beban. Membuat objek baru structured_task_group . |
~structured_task_group Destructor | Menghancurkan objek structured_task_group . Anda diharapkan untuk memanggil wait metode atau run_and_wait pada objek sebelum destruktor yang dijalankan, kecuali destruktor dijalankan sebagai akibat dari pelepasan tumpukan karena pengecualian. |
Metode Publik
Nama | Deskripsi |
---|---|
batalkan | Lakukan upaya terbaik untuk membatalkan sub-pohon pekerjaan yang berakar pada grup tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan. |
is_canceling | Menginformasikan pemanggil apakah grup tugas saat ini berada di tengah pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa cancel metode dipanggil pada structured_task_group objek (meskipun metode tersebut tentu memenuhi syarat untuk mengembalikan true metode ini ). Mungkin saja structured_task_group objek menjalankan sebaris dan grup tugas lebih lanjut di pohon kerja dibatalkan. Dalam kasus seperti ini di mana runtime dapat menentukan sebelumnya bahwa pembatalan akan mengalir melalui objek ini structured_task_group , true akan dikembalikan juga. |
jalankan | Kelebihan beban. Menjadwalkan tugas pada structured_task_group objek. Pemanggil mengelola masa pakai objek yang task_handle diteruskan dalam _Task_handle parameter . Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut. |
run_and_wait | Kelebihan beban. Menjadwalkan tugas yang akan dijalankan sebaris pada konteks panggilan dengan bantuan structured_task_group objek untuk dukungan pembatalan penuh. task_handle Jika objek diteruskan sebagai parameter ke run_and_wait , pemanggil bertanggung jawab untuk mengelola masa task_handle pakai objek. Fungsi kemudian menunggu hingga semua pekerjaan pada structured_task_group objek telah selesai atau dibatalkan. |
Tunggu | Menunggu hingga semua pekerjaan pada structured_task_group telah selesai atau dibatalkan. |
Keterangan
Ada sejumlah pembatasan berat yang ditempatkan pada penggunaan structured_task_group
objek untuk mendapatkan performa:
Satu
structured_task_group
objek tidak dapat digunakan oleh beberapa utas. Semua operasi padastructured_task_group
objek harus dilakukan oleh utas yang membuat objek. Dua pengecualian untuk aturan ini adalah fungsicancel
anggota danis_canceling
. Objek mungkin tidak berada dalam daftar pengambilan ekspresi lambda dan digunakan dalam tugas, kecuali tugas menggunakan salah satu operasi pembatalan.Semua tugas yang dijadwalkan ke
structured_task_group
objek dijadwalkan melalui penggunaantask_handle
objek yang harus Anda kelola secara eksplisit masa pakainya.Beberapa grup hanya dapat digunakan dalam urutan yang benar-benar berlapis. Jika dua
structured_task_group
objek dideklarasikan, objek kedua yang dinyatakan (yang dalam) harus dihancurkan sebelum metode apa pun kecualicancel
atauis_canceling
dipanggil pada yang pertama (yang luar). Kondisi ini berlaku dalam kedua kasus hanya mendeklarasikan beberapastructured_task_group
objek dalam cakupan yang sama atau berlapis secara fungsional serta kasus tugas yang diantrekan kestructured_task_group
melaluirun
metode ataurun_and_wait
.Tidak seperti kelas umum
task_group
, semua negara bagian distructured_task_group
kelas bersifat final. Setelah Anda mengantrekan tugas ke grup dan menunggu tugas selesai, Anda mungkin tidak menggunakan grup yang sama lagi.
Untuk informasi selengkapnya, lihat Paralelisme Tugas.
Hierarki Warisan
structured_task_group
Persyaratan
Header: ppl.h
Namespace: konkurensi
batalkan
Lakukan upaya terbaik untuk membatalkan sub-pohon pekerjaan yang berakar pada grup tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan.
void cancel();
Keterangan
Untuk informasi selengkapnya, lihat Pembatalan.
is_canceling
Menginformasikan pemanggil apakah grup tugas saat ini berada di tengah pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa cancel
metode dipanggil pada structured_task_group
objek (meskipun metode tersebut tentu memenuhi syarat untuk mengembalikan true
metode ini ). Mungkin saja structured_task_group
objek menjalankan sebaris dan grup tugas lebih lanjut di pohon kerja dibatalkan. Dalam kasus seperti ini di mana runtime dapat menentukan sebelumnya bahwa pembatalan akan mengalir melalui objek ini structured_task_group
, true
akan dikembalikan juga.
bool is_canceling();
Tampilkan Nilai
Indikasi apakah structured_task_group
objek berada di tengah pembatalan (atau dijamin segera).
Keterangan
Untuk informasi selengkapnya, lihat Pembatalan.
jalankan
Menjadwalkan tugas pada structured_task_group
objek. Pemanggil mengelola masa pakai objek yang task_handle
diteruskan dalam _Task_handle
parameter . Versi yang mengambil parameter _Placement
menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut.
template<class _Function>
void run(
task_handle<_Function>& _Task_handle);
template<class _Function>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement);
Parameter
_Fungsi
Jenis objek fungsi yang akan dipanggil untuk menjalankan isi handel tugas.
_Task_handle
Handel ke pekerjaan yang sedang dijadwalkan. Perhatikan bahwa penelepon memiliki tanggung jawab atas masa pakai objek ini. Runtime akan terus mengharapkannya hidup sampai wait
metode atau run_and_wait
telah dipanggil pada objek ini structured_task_group
.
_Penempatan
Referensi ke lokasi tempat tugas yang diwakili oleh _Task_handle
parameter harus dijalankan.
Keterangan
Runtime membuat salinan fungsi kerja yang Anda teruskan ke metode ini. Setiap perubahan status yang terjadi dalam objek fungsi yang Anda teruskan ke metode ini tidak akan muncul di salinan objek fungsi tersebut.
structured_task_group
Jika destructs sebagai hasil dari stack unwinding dari pengecualian, Anda tidak perlu menjamin bahwa panggilan telah dilakukan ke wait
metode atau run_and_wait
. Dalam hal ini, destruktor akan dengan tepat membatalkan dan menunggu tugas yang _Task_handle
diwakili oleh parameter selesai.
Melemparkan pengecualian invalid_multiple_scheduling jika handel tugas yang diberikan oleh _Task_handle
parameter telah dijadwalkan ke objek grup tugas melalui run
metode dan belum ada panggilan intervensi ke metode atau run_and_wait
pada grup tugas tersebutwait
.
run_and_wait
Menjadwalkan tugas yang akan dijalankan sebaris pada konteks panggilan dengan bantuan structured_task_group
objek untuk dukungan pembatalan penuh. task_handle
Jika objek diteruskan sebagai parameter ke run_and_wait
, pemanggil bertanggung jawab untuk mengelola masa task_handle
pakai objek. Fungsi kemudian menunggu hingga semua pekerjaan pada structured_task_group
objek telah selesai atau dibatalkan.
template<class _Function>
task_group_status run_and_wait(task_handle<_Function>& _Task_handle);
template<class _Function>
task_group_status run_and_wait(const _Function& _Func);
Parameter
_Fungsi
Jenis objek fungsi yang akan dipanggil untuk menjalankan tugas.
_Task_handle
Handel ke tugas yang akan dijalankan sebaris pada konteks panggilan. Perhatikan bahwa penelepon memiliki tanggung jawab atas masa pakai objek ini. Runtime akan terus mengharapkannya hidup sampai metode selesai dieksekusi run_and_wait
.
_Func
Fungsi yang akan dipanggil untuk memanggil isi pekerjaan. Ini mungkin lambda atau objek lain yang mendukung versi operator panggilan fungsi dengan tanda tangan void operator()()
.
Tampilkan Nilai
Indikasi apakah penantian terpenuhi atau grup tugas dibatalkan, karena operasi pembatalan eksplisit atau pengecualian dilemparkan dari salah satu tugasnya. Untuk informasi selengkapnya, lihat task_group_status
Keterangan
Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group
dapat dijalankan sebaris pada konteks panggilan.
Jika satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group
memunculkan pengecualian, runtime akan memilih satu pengecualian tersebut dari pemilihannya dan menyebarkannya keluar dari panggilan ke run_and_wait
metode .
Setelah fungsi ini kembali, structured_task_group
objek dipertimbangkan dalam status akhir dan tidak boleh digunakan. Perhatikan bahwa pemanfaatan setelah run_and_wait
metode kembali akan mengakibatkan perilaku yang tidak ditentukan.
Dalam jalur eksekusi yang tidak luar biasa, Anda memiliki mandat untuk memanggil metode ini atau wait
metode sebelum destruktor structured_task_group
eksekusi.
structured_task_group
Membuat objek baru structured_task_group
.
structured_task_group();
structured_task_group(cancellation_token _CancellationToken);
Parameter
_CancellationToken
Token pembatalan untuk dikaitkan dengan grup tugas terstruktur ini. Grup tugas terstruktur akan dibatalkan ketika token dibatalkan.
Keterangan
Konstruktor yang mengambil token pembatalan membuat structured_task_group
yang akan dibatalkan ketika sumber yang terkait dengan token dibatalkan. Menyediakan token pembatalan eksplisit juga mengisolasi grup tugas terstruktur ini agar tidak berpartisipasi dalam pembatalan implisit dari grup induk dengan token yang berbeda atau tanpa token.
~structured_task_group
Menghancurkan objek structured_task_group
. Anda diharapkan untuk memanggil wait
metode atau run_and_wait
pada objek sebelum destruktor yang dijalankan, kecuali destruktor dijalankan sebagai akibat dari pelepasan tumpukan karena pengecualian.
~structured_task_group();
Keterangan
Jika destruktor berjalan sebagai hasil dari eksekusi normal (misalnya, tidak melepas tumpukan karena pengecualian) dan baik wait
metode maupun run_and_wait
yang telah dipanggil, destruktor dapat melemparkan pengecualian missing_wait .
tunggu
Menunggu hingga semua pekerjaan pada structured_task_group
telah selesai atau dibatalkan.
task_group_status wait();
Tampilkan Nilai
Indikasi apakah penantian terpenuhi atau grup tugas dibatalkan, karena operasi pembatalan eksplisit atau pengecualian dilemparkan dari salah satu tugasnya. Untuk informasi selengkapnya, lihat task_group_status
Keterangan
Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group
dapat dijalankan sebaris pada konteks panggilan.
Jika satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group
memunculkan pengecualian, runtime akan memilih satu pengecualian tersebut dari pemilihannya dan menyebarkannya keluar dari panggilan ke wait
metode .
Setelah fungsi ini kembali, structured_task_group
objek dipertimbangkan dalam status akhir dan tidak boleh digunakan. Perhatikan bahwa pemanfaatan setelah wait
metode kembali akan mengakibatkan perilaku yang tidak ditentukan.
Dalam jalur eksekusi yang tidak luar biasa, Anda memiliki mandat untuk memanggil metode ini atau run_and_wait
metode sebelum destruktor structured_task_group
eksekusi.
Baca juga
Namespace layanan konkurensi
Kelas task_group
Kelas task_handle
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk