task Class (Concurrency Runtime)
Kelas Pustaka Pola Paralel (PPL). task
Objek task
mewakili pekerjaan yang dapat dijalankan secara asinkron dan bersamaan dengan tugas lain dan pekerjaan paralel yang dihasilkan oleh algoritma paralel dalam Runtime Konkurensi. Ini menghasilkan hasil dari jenis _ResultType
pada penyelesaian yang berhasil. Tugas jenis task<void>
tidak menghasilkan hasil. Tugas dapat ditunggu dan dibatalkan secara independen dari tugas lain. Ini juga dapat terdiri dengan tugas lain menggunakan pola continuations( ), dan join( then
when_all
) dan choice( when_any
). Ketika objek tugas ditetapkan ke variabel baru, perilakunya adalah ; std::shared_ptr
dengan kata lain, kedua objek mewakili tugas yang mendasar yang sama.
Sintaks
template <>
class task<void>;
template<typename _ResultType>
class task;
Parameter
_ResultType
Jenis hasil yang dihasilkan tugas.
Anggota
Typedef Publik
Nama | Deskripsi |
---|---|
result_type |
Jenis hasil yang dihasilkan objek kelas ini. |
Konstruktor Publik
Nama | Deskripsi |
---|---|
tugas | Kelebihan beban. Membuat task objek. |
Metode Publik
Nama | Deskripsi |
---|---|
get | Kelebihan beban. Mengembalikan hasil yang dihasilkan tugas ini. Jika tugas tidak dalam status terminal, panggilan ke get akan menunggu tugas selesai. Metode ini tidak mengembalikan nilai ketika dipanggil pada tugas dengan result_type .void |
is_apartment_aware | Menentukan apakah tugas membongkar antarmuka Windows Runtime IAsyncInfo atau turun dari tugas seperti itu. |
is_done | Menentukan apakah tugas selesai. |
Scheduler | Mengembalikan penjadwal untuk tugas ini |
then | Kelebihan beban. Menambahkan tugas kelanjutan ke tugas ini. |
Tunggu | Menunggu tugas ini mencapai status terminal. Dimungkinkan untuk wait menjalankan tugas sebaris, jika semua dependensi tugas terpenuhi, dan belum diambil untuk dieksekusi oleh pekerja latar belakang. |
Operator Publik
Nama | Deskripsi |
---|---|
operator!= | Kelebihan beban. Menentukan apakah dua task objek mewakili tugas internal yang berbeda. |
operator= | Kelebihan beban. Mengganti isi satu task objek dengan objek lainnya. |
operator== | Kelebihan beban. Menentukan apakah dua task objek mewakili tugas internal yang sama. |
Keterangan
Untuk informasi selengkapnya, lihat Paralelisme Tugas.
Hierarki Warisan
task
Persyaratan
Header: ppltasks.h
Namespace: konkurensi
get
Mengembalikan hasil yang dihasilkan tugas ini. Jika tugas tidak dalam status terminal, panggilan ke get
akan menunggu tugas selesai. Metode ini tidak mengembalikan nilai ketika dipanggil pada tugas dengan result_type
.void
_ResultType get() const;
void get() const;
Tampilkan Nilai
Hasil tugas.
Keterangan
Jika tugas dibatalkan, panggilan ke get
akan melemparkan pengecualian task_canceled . Jika tugas menemukan pengecualian yang berbeda atau pengecualian disebarluaskan ke tugas tersebut dari tugas antecedent, panggilan untuk get
akan melemparkan pengecualian tersebut.
Penting
Dalam aplikasi Platform Windows Universal (UWP), jangan panggil konkurensi::task::wait atau get
( wait
panggilan get
) dalam kode yang berjalan pada utas antarmuka pengguna. Jika tidak, runtime melemparkan konkurensi::invalid_operation karena metode ini memblokir utas saat ini dan dapat menyebabkan aplikasi menjadi tidak responsif. Namun, Anda dapat memanggil get
metode untuk menerima hasil tugas antecedent dalam kelanjutan berbasis tugas karena hasilnya segera tersedia.
is_apartment_aware
Menentukan apakah tugas membongkar antarmuka Windows Runtime IAsyncInfo
atau turun dari tugas seperti itu.
bool is_apartment_aware() const;
Tampilkan Nilai
true
jika tugas membongkar IAsyncInfo
antarmuka atau turun dari tugas seperti itu, false
jika tidak.
task::is_done Method (Concurrency Runtime)
Menentukan apakah tugas selesai.
bool is_done() const;
Tampilkan Nilai
True jika tugas telah selesai, salah jika tidak.
Keterangan
Fungsi mengembalikan true jika tugas selesai atau dibatalkan (dengan atau tanpa pengecualian pengguna).
operator!=
Menentukan apakah dua task
objek mewakili tugas internal yang berbeda.
bool operator!= (const task<_ResultType>& _Rhs) const;
bool operator!= (const task<void>& _Rhs) const;
Parameter
_Rhs
Tugas untuk membandingkan.
Tampilkan Nilai
true
jika objek merujuk ke tugas yang mendasar yang berbeda, dan false
sebaliknya.
operator=
Mengganti isi satu task
objek dengan objek lainnya.
task& operator= (const task& _Other);
task& operator= (task&& _Other);
Parameter
_Other
Objek sumber task
.
Tampilkan Nilai
Keterangan
Seperti task
perilaku seperti penunjuk cerdas, setelah penugasan salinan, objek ini task
mewakili tugas aktual yang sama seperti _Other
yang dilakukan.
operator==
Menentukan apakah dua task
objek mewakili tugas internal yang sama.
bool operator== (const task<_ResultType>& _Rhs) const;
bool operator== (const task<void>& _Rhs) const;
Parameter
_Rhs
Tugas untuk membandingkan.
Tampilkan Nilai
true
jika objek merujuk ke tugas yang mendasar yang sama, dan false
sebaliknya.
task::scheduler Method (Concurrency Runtime)
Mengembalikan penjadwal untuk tugas ini
scheduler_ptr scheduler() const;
Tampilkan Nilai
Penunjuk ke penjadwal
tugas
Membuat task
objek.
task();
template<typename T>
__declspec(
noinline) explicit task(T _Param);
template<typename T>
__declspec(
noinline) explicit task(T _Param, const task_options& _TaskOptions);
task(
const task& _Other);
task(
task&& _Other);
Parameter
T
Jenis parameter tempat tugas akan dibangun.
_Param
Parameter tempat tugas akan dibangun. Ini bisa berupa lambda, objek fungsi, task_completion_event<result_type>
objek, atau Windows::Foundation::IAsyncInfo jika Anda menggunakan tugas di aplikasi Windows Runtime Anda. Objek lambda atau fungsi harus berupa jenis yang setara std::function<X(void)>
dengan , di mana X dapat menjadi variabel jenis result_type
, , task<result_type>
, atau Windows::Foundation::IAsyncInfo di aplikasi Windows Runtime.
_TaskOptions
Opsi tugas mencakup token pembatalan, penjadwal, dll
_Other
Objek sumber task
.
Keterangan
Konstruktor default untuk task
hanya ada untuk memungkinkan tugas digunakan dalam kontainer. Tugas default yang dibuat tidak dapat digunakan sampai Anda menetapkan tugas yang valid untuk tugas tersebut. Metode seperti get
, wait
atau then
akan melemparkan pengecualian invalid_argument saat dipanggil pada tugas default yang dibangun.
Tugas yang dibuat dari task_completion_event
akan selesai (dan kelanjutannya dijadwalkan) saat peristiwa penyelesaian tugas diatur.
Versi konstruktor yang mengambil token pembatalan membuat tugas yang dapat dibatalkan menggunakan cancellation_token_source
token diperoleh. Tugas yang dibuat tanpa token pembatalan tidak dapat dibatalkan.
Tugas yang Windows::Foundation::IAsyncInfo
dibuat dari antarmuka atau lambda yang mengembalikan IAsyncInfo
antarmuka mencapai status terminal mereka ketika operasi atau tindakan asinkron Windows Runtime yang diapit selesai. Demikian pula, tugas yang dibuat dari lambda yang mengembalikan task<result_type>
mencapai status terminal mereka ketika tugas dalam mencapai status terminalnya, dan bukan ketika lambda kembali.
task
berperilaku seperti penunjuk cerdas dan aman untuk diteruskan berdasarkan nilai. Ini dapat diakses oleh beberapa utas tanpa perlu kunci.
Konstruktor kelebihan beban yang mengambil antarmuka Windows::Foundation::IAsyncInfo atau lambda yang mengembalikan antarmuka tersebut, hanya tersedia untuk aplikasi Windows Runtime.
Untuk informasi selengkapnya, lihat Paralelisme Tugas.
kemudian
Menambahkan tugas kelanjutan ke tugas ini.
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
cancellation_token _CancellationToken,
task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits<_Function,
void>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
cancellation_token _CancellationToken,
task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
void>::_TaskOfType;
Parameter
_Fungsi
Tipe objek fungsi yang akan dipanggil oleh tugas ini.
_Func
Fungsi kelanjutan untuk dijalankan ketika tugas ini selesai. Fungsi kelanjutan ini harus mengambil sebagai input variabel dari salah satu result_type
atau task<result_type>
, di mana result_type
adalah jenis hasil yang dihasilkan tugas ini.
_TaskOptions
Opsi tugas mencakup token pembatalan, penjadwal, dan konteks kelanjutan. Secara default, 3 opsi sebelumnya diwarisi dari tugas antecedent
_CancellationToken
Token pembatalan untuk dikaitkan dengan tugas kelanjutan. Tugas kelanjutan yang dibuat tanpa token pembatalan akan mewarisi token tugas antecedent-nya.
_ContinuationContext
Variabel yang menentukan tempat kelanjutan harus dijalankan. Variabel ini hanya berguna saat digunakan dalam aplikasi UWP. Untuk informasi selengkapnya, lihat task_continuation_context
Tampilkan Nilai
Tugas kelanjutan yang baru dibuat. Jenis hasil tugas yang dikembalikan ditentukan oleh apa yang _Func
dikembalikan.
Keterangan
Kelebihan beban then
yang mengambil lambda atau functor yang mengembalikan antarmuka Windows::Foundation::IAsyncInfo, hanya tersedia untuk aplikasi Windows Runtime.
Untuk informasi selengkapnya tentang cara menggunakan kelanjutan tugas untuk menyusun pekerjaan asinkron, lihat Paralelisme Tugas.
tunggu
Menunggu tugas ini mencapai status terminal. Dimungkinkan untuk wait
menjalankan tugas sebaris, jika semua dependensi tugas terpenuhi, dan belum diambil untuk dieksekusi oleh pekerja latar belakang.
task_status wait() const;
Tampilkan Nilai
Nilai task_status
yang bisa berupa completed
atau canceled
. Jika tugas mengalami pengecualian selama eksekusi, atau pengecualian disebarluaskan ke tugas tersebut dari tugas antecedent, wait
akan melemparkan pengecualian tersebut.
Keterangan
Penting
Di aplikasi Platform Windows Universal (UWP), jangan panggil wait
kode yang berjalan pada utas antarmuka pengguna. Jika tidak, runtime melemparkan konkurensi::invalid_operation karena metode ini memblokir utas saat ini dan dapat menyebabkan aplikasi menjadi tidak responsif. Namun, Anda dapat memanggil metode concurrency::task::get untuk menerima hasil tugas antecedent dalam kelanjutan berbasis tugas.