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( thenwhen_all) dan choice( when_any). Ketika objek tugas ditetapkan ke variabel baru, perilakunya adalah ; std::shared_ptrdengan 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.

Baca juga

Namespace layanan konkurensi