Kelas tugas (Runtime Konkurensi)

Kelas Perpustakaan Pola Paralel (PPL task ). Sebuah task objek mewakili pekerjaan yang dapat dijalankan secara asinkron dan bersamaan dengan tugas-tugas lain dan pekerjaan paralel yang dihasilkan oleh algoritma paralel dalam Concurrency Runtime. 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-tugas lain. Hal ini juga dapat disusun dengan tugas-tugas lain menggunakan kelanjutan ( then), dan bergabung ( when_all) dan pilihan ( when_any) pola. Ketika objek tugas ditugaskan ke variabel baru, perilakunya adalah std::shared_ptr; dengan kata lain, kedua objek mewakili tugas dasar yang sama.

Sintaks

template <>
class task<void>;

template<typename _ResultType>
class task;

Parameter

_ResultType
Jenis hasil yang dihasilkan tugas.

Anggota

Typedefs Publik

Nama Deskripsi
result_type Jenis hasil yang dihasilkan objek kelas ini.

Konstruktor Publik

Nama Deskripsi
tugas Kelebihan beban. Membangun sebuah task objek.

Metode Publik

Nama Deskripsi
get Kelebihan beban. Mengembalikan hasil tugas yang dihasilkan ini. Jika tugas tidak dalam keadaan terminal, panggilan akan get menunggu tugas selesai. Metode ini tidak mengembalikan nilai ketika dipanggil pada tugas dengan a result_typevoid.
is_apartment_aware Menentukan apakah tugas membuka bungkus antarmuka Windows 运行时 IAsyncInfo atau diturunkan dari tugas semacam itu.
is_done Menentukan apakah tugas selesai.
Scheduler Mengembalikan penjadwal untuk tugas ini
kemudian Kelebihan beban. Menambahkan tugas kelanjutan ke tugas ini.
Tunggu Menunggu tugas ini mencapai status terminal. Dimungkinkan untuk wait menjalankan inline tugas, 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 Pewarisan

task

Persyaratan

Header: ppltasks.h

Namespace: konkurensi

get

Mengembalikan hasil tugas yang dihasilkan ini. Jika tugas tidak dalam keadaan terminal, panggilan akan get menunggu tugas selesai. Metode ini tidak mengembalikan nilai ketika dipanggil pada tugas dengan a result_typevoid.

_ResultType get() const;

void get() const;

Tampilkan Nilai

Hasil dari tugas.

Keterangan

Jika tugas dibatalkan, panggilan untuk get akan memberikan pengecualian task_canceled . Jika tugas mengalami pengecualian atau pengecualian yang berbeda disebarkan kepadanya dari tugas pendahulu, panggilan untuk get akan melemparkan pengecualian itu.

Penting

Dalam aplikasi Universelle Windows-Plattform (UWP), jangan memanggil konkurensi::task::wait atau get ( wait panggilanget) dalam kode yang berjalan pada utas antarmuka pengguna. Jika tidak, runtime memberikan 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 anteseden dalam kelanjutan berbasis tugas karena hasilnya segera tersedia.

is_apartment_aware

Menentukan apakah tugas membuka bungkus antarmuka Windows 运行时 IAsyncInfo atau diturunkan dari tugas semacam itu.

bool is_apartment_aware() const;

Tampilkan Nilai

true jika tugas membuka bungkus IAsyncInfo antarmuka atau diturunkan dari tugas seperti itu, false jika tidak.

tugas::metode is_done (Concurrency Runtime)

Menentukan apakah tugas selesai.

bool is_done() const;

Tampilkan Nilai

Benar 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 mengacu pada tugas dasar 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 berperilaku seperti penunjuk cerdas, setelah tugas salin, objek ini task mewakili tugas aktual yang sama seperti _Other halnya.

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 mengacu pada tugas dasar 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

Membangun sebuah 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 dari mana tugas harus dibangun.

_Param
Parameter dari mana tugas harus dibangun. Ini bisa berupa lambda, objek fungsi, task_completion_event<result_type> objek, atau Windows::Foundation::IAsyncInfo jika Anda menggunakan tugas di aplikasi Windows 运行时 Anda. Lambda atau objek fungsi harus merupakan tipe yang setara std::function<X(void)>dengan , di mana X dapat berupa variabel tiperesult_type, task<result_type>, atau Windows::Foundation::IAsyncInfo di aplikasi Windows 运行时.

_TaskOptions
Opsi tugas termasuk token pembatalan, penjadwal, dll

_Other
Objek sumber task .

Keterangan

Konstruktor default untuk a task hanya ada untuk memungkinkan tugas digunakan dalam kontainer. Tugas bawaan bawaan tidak dapat digunakan sampai Anda menetapkan tugas yang valid untuk itu. Metode seperti get, wait atau then akan memberikan pengecualian invalid_argument ketika dipanggil pada tugas bawaan default.

Tugas yang dibuat dari task_completion_event surat wasiat selesai (dan memiliki kelanjutannya dijadwalkan) ketika acara penyelesaian tugas ditetapkan.

Versi konstruktor yang mengambil token pembatalan membuat tugas yang dapat dibatalkan menggunakan cancellation_token_source token yang diperoleh. Tugas yang dibuat tanpa token pembatalan tidak dapat dibatalkan.

Tugas yang Windows::Foundation::IAsyncInfo dibuat dari antarmuka atau lambda yang IAsyncInfo mengembalikan antarmuka mencapai status terminalnya saat operasi atau tindakan asinkron Windows 运行时 tertutup selesai. Demikian pula, tugas yang dibuat dari lambda yang task<result_type> mengembalikan jangkauan status terminal mereka ketika tugas dalam mencapai status terminalnya, dan bukan ketika lambda kembali.

task berperilaku seperti penunjuk cerdas dan aman untuk dilewatkan berdasarkan nilai. Ini dapat diakses oleh beberapa utas tanpa perlu kunci.

Kelebihan konstruktor yang mengambil antarmuka Windows::Foundation::IAsyncInfo atau lambda yang mengembalikan antarmuka seperti itu, hanya tersedia untuk aplikasi Windows 运行时.

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

_Function
Jenis objek fungsi yang akan dipanggil oleh tugas ini.

_Func
Fungsi kelanjutan untuk dijalankan saat tugas ini selesai. Fungsi kelanjutan ini harus mengambil sebagai input variabel dari salah satu result_type atau task<result_type>, di mana result_type jenis hasil tugas ini menghasilkan.

_TaskOptions
Opsi tugas mencakup token pembatalan, penjadwal, dan konteks kelanjutan. Secara default 3 opsi sebelumnya diwarisi dari tugas pendahulu

_CancellationToken
Token pembatalan untuk dikaitkan dengan tugas kelanjutan. Tugas kelanjutan yang dibuat tanpa token pembatalan akan mewarisi token tugas pendahulunya.

_ContinuationContext
Variabel yang menentukan di mana kelanjutan harus dijalankan. Variabel ini hanya berguna saat digunakan dalam aplikasi UWP. Untuk informasi lebih lanjut, lihat task_continuation_context

Tampilkan Nilai

Tugas kelanjutan yang baru dibuat. Jenis hasil dari tugas yang dikembalikan ditentukan oleh pengembalian apa _Func .

Keterangan

Kelebihan beban then yang mengambil lambda atau functor yang mengembalikan antarmuka Windows::Foundation::IAsyncInfo, hanya tersedia untuk aplikasi Windows 运行时.

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 inline tugas, 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 atau completedcanceled. Jika tugas mengalami pengecualian selama eksekusi, atau pengecualian disebarkan ke sana dari tugas anteseden, wait akan melemparkan pengecualian itu.

Keterangan

Penting

Di aplikasi Universelle Windows-Plattform (UWP), jangan memanggil wait kode yang berjalan di utas antarmuka pengguna. Jika tidak, runtime memberikan konkurensi::invalid_operation karena metode ini memblokir utas saat ini dan dapat menyebabkan aplikasi menjadi tidak responsif. Namun, Anda dapat memanggil metode konkurensi::task::get untuk menerima hasil tugas anteseden dalam kelanjutan berbasis tugas.

Lihat juga

namespace konkurensi