task – třída (Concurrency Runtime)
Třída PPL (Parallel Patterns Library). task
Objekt task
představuje práci, kterou lze spouštět asynchronně a souběžně s jinými úlohami a paralelní prací vytvořenou paralelními algoritmy v modulu Concurrency Runtime. Vygeneruje výsledek typu _ResultType
při úspěšném dokončení. Úkoly typu task<void>
nevygenerují žádný výsledek. Úkol lze čekat a zrušit nezávisle na ostatních úkolech. Dá se také skládat s jinými úkoly pomocí vzorců pokračování( then
) a join( when_all
) a choice( when_any
). Pokud je objekt úkolu přiřazen k nové proměnné, chování je std::shared_ptr
to ; jinými slovy, oba objekty představují stejný podkladový úkol.
Syntaxe
template <>
class task<void>;
template<typename _ResultType>
class task;
Parametry
_ResultType
Typ výsledku, který úkol vytvoří.
Členové
Veřejné definice typedef
Název | Popis |
---|---|
result_type |
Typ výsledku, který vytvoří objekt této třídy. |
Veřejné konstruktory
Název | Popis |
---|---|
úkol | Přetíženo. task Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
get | Přetíženo. Vrátí výsledek, který tento úkol vytvořil. Pokud úkol není v terminálovém stavu, volání, které get bude čekat na dokončení úkolu. Tato metoda nevrací hodnotu při zavolání úkolu s hodnotou result_type .void |
is_apartment_aware | Určuje, zda úloha rozbalí prostředí Windows Runtime IAsyncInfo rozhraní nebo sestupně od takového úkolu. |
is_done | Určuje, zda je úkol dokončen. |
plánovač | Vrátí plánovač pro tuto úlohu. |
potom | Přetíženo. Přidá úkol pokračování do tohoto úkolu. |
Počkej | Čeká na dosažení stavu terminálu. Pokud jsou všechny závislosti úkolů splněné, je možné wait spustit úlohu vloženou a pracovní proces na pozadí ho ještě nezvolil ke spuštění. |
Veřejné operátory
Název | Popis |
---|---|
operator!= | Přetíženo. Určuje, zda dva task objekty představují různé interní úlohy. |
operator= | Přetíženo. Nahradí obsah jednoho task objektu jiným. |
operator== | Přetíženo. Určuje, zda dva task objekty představují stejný interní úkol. |
Poznámky
Další informace naleznete v tématu Paralelismus úkolu.
Hierarchie dědičnosti
task
Požadavky
Hlavička: ppltasks.h
Namespace: souběžnost
get
Vrátí výsledek, který tento úkol vytvořil. Pokud úkol není v terminálovém stavu, volání, které get
bude čekat na dokončení úkolu. Tato metoda nevrací hodnotu při zavolání úkolu s hodnotou result_type
.void
_ResultType get() const;
void get() const;
Návratová hodnota
Výsledek úkolu.
Poznámky
Pokud je úkol zrušen, volání get
vyvolá task_canceled výjimku. Pokud úloha zjistila jinou výjimku nebo byla na ni rozšířena z předpočítané úlohy, vyvolá volání get
této výjimky.
Důležité
V aplikaci Univerzální platforma Windows (UPW) nevolejte souběžnost::task::wait nebo get
( wait
voláníget
) v kódu, který běží ve vlákně uživatelského rozhraní. V opačném případě modul runtime vyvolá souběžnost::invalid_operation , protože tyto metody blokují aktuální vlákno a můžou způsobit, že aplikace přestane reagovat. Můžete však volat metodu get
, která obdrží výsledek úkolu založeného na úloze na pokračování, protože výsledek je okamžitě k dispozici.
is_apartment_aware
Určuje, zda úloha rozbalí prostředí Windows Runtime IAsyncInfo
rozhraní nebo sestupně od takového úkolu.
bool is_apartment_aware() const;
Návratová hodnota
true
pokud úkol rozbalí IAsyncInfo
rozhraní nebo je sestupně od takového úkolu, false
jinak.
task::is_done – metoda (Concurrency Runtime)
Určuje, zda je úkol dokončen.
bool is_done() const;
Návratová hodnota
Hodnota True, pokud se úkol dokončil, jinak je false.
Poznámky
Funkce vrátí hodnotu true, pokud je úkol dokončen nebo zrušen (s výjimkou uživatele nebo bez).
operator!=
Určuje, zda dva task
objekty představují různé interní úlohy.
bool operator!= (const task<_ResultType>& _Rhs) const;
bool operator!= (const task<void>& _Rhs) const;
Parametry
_Rhs
Úkol, který chcete porovnat.
Návratová hodnota
true
pokud objekty odkazují na různé podkladové úkoly, a false
jinak.
operator=
Nahradí obsah jednoho task
objektu jiným.
task& operator= (const task& _Other);
task& operator= (task&& _Other);
Parametry
_Jiný
Zdrojový task
objekt.
Návratová hodnota
Poznámky
Jak task
se chová jako inteligentní ukazatel, po přiřazení kopírování představuje tento task
objekt stejný skutečný úkol jako _Other
vy.
operator==
Určuje, zda dva task
objekty představují stejný interní úkol.
bool operator== (const task<_ResultType>& _Rhs) const;
bool operator== (const task<void>& _Rhs) const;
Parametry
_Rhs
Úkol, který chcete porovnat.
Návratová hodnota
true
pokud objekty odkazují na stejnou podkladovou úlohu a false
jinak.
task::scheduler – metoda (Concurrency Runtime)
Vrátí plánovač pro tuto úlohu.
scheduler_ptr scheduler() const;
Návratová hodnota
Ukazatel na plánovač
úkol
task
Vytvoří objekt.
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);
Parametry
T
Typ parametru, ze kterého má být úkol vytvořen.
_Param
Parametr, ze kterého má být úkol vytvořen. To může být lambda, objekt funkce, task_completion_event<result_type>
objekt nebo Windows::Foundation::IAsyncInfo, pokud používáte úlohy v aplikaci prostředí Windows Runtime. Objekt lambda nebo funkce by měl být typem ekvivalentní std::function<X(void)>
, kde X může být proměnná typu result_type
, task<result_type>
nebo Windows::Foundation::IAsyncInfo v prostředí Windows Runtime aplikacích.
_TaskOptions
Mezi možnosti úlohy patří token zrušení, plánovač atd.
_Jiný
Zdrojový task
objekt.
Poznámky
Výchozí konstruktor pro a task
je pouze k dispozici, aby bylo možné úlohy používat v rámci kontejnerů. Výchozí vytvořený úkol nelze použít, dokud k němu nepřiřadíte platný úkol. Metody, jako get
je , wait
nebo then
vyvolá invalid_argument výjimku při vyvolání výchozí konstruované úlohy.
Úkol vytvořený z task_completion_event
úkolu se dokončí (a bude mít naplánované pokračování), když je nastavena událost dokončení úkolu.
Verze konstruktoru, který přebírá token zrušení, vytvoří úlohu, kterou lze zrušit pomocí tokenu cancellation_token_source
byl získán z. Úlohy vytvořené bez tokenu zrušení nelze zrušit.
Úlohy vytvořené z Windows::Foundation::IAsyncInfo
rozhraní nebo lambda, které vrátí IAsyncInfo
rozhraní, dosáhne stavu terminálu, když uzavřená prostředí Windows Runtime asynchronní operace nebo akce skončí. Podobně úlohy vytvořené z lambda, které vrací task<result_type>
dosažení stavu terminálu, když vnitřní úkol dosáhne stavu terminálu, a ne když lambda vrátí.
task
chová se jako inteligentní ukazatel a je bezpečný pro předávání podle hodnoty. Přístup k němu může získat více vláken, aniž by bylo nutné zámky.
Konstruktor přetěžuje, které přebírají rozhraní Windows::Foundation::IAsyncInfo nebo lambda vracející takové rozhraní, jsou k dispozici pouze pro prostředí Windows Runtime aplikace.
Další informace naleznete v tématu Paralelismus úkolu.
pak ...
Přidá úkol pokračování do tohoto úkolu.
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;
Parametry
_Funkce
Typ objektu funkce, který bude vyvolán touto úlohou.
_Func
Funkce pokračování, která se má provést po dokončení této úlohy. Tato funkce pokračování musí být vstupní proměnnou buď result_type
nebo task<result_type>
, kde result_type
je typ výsledku, který tento úkol vytvoří.
_TaskOptions
Mezi možnosti úlohy patří token zrušení, plánovač a kontext pokračování. Ve výchozím nastavení jsou zděděné z dřívějších 3 možností z úlohy s tecedentem.
_CancellationToken
Token zrušení, který se má přidružit k úloze pokračování. Úloha pokračování, která se vytvoří bez tokenu zrušení, zdědí token jeho úlohy s tecedent.
_ContinuationContext
Proměnná, která určuje, kde se má pokračování provést. Tato proměnná je užitečná jenom v případě, že se používá v aplikaci pro UPW. Další informace najdete v tématu task_continuation_context
Návratová hodnota
Nově vytvořený úkol pokračování. Typ výsledku vráceného úkolu je určen tím, co _Func
se vrátí.
Poznámky
Přetíženíthen
, která přebírají lambda nebo functor, který vrací rozhraní Windows::Foundation::IAsyncInfo, jsou k dispozici pouze pro prostředí Windows Runtime aplikace.
Další informace o tom, jak používat pokračování úkolů k vytváření asynchronní práce, naleznete v tématu Paralelismus úkolu.
wait
Čeká na dosažení stavu terminálu. Pokud jsou všechny závislosti úkolů splněné, je možné wait
spustit úlohu vloženou a pracovní proces na pozadí ho ještě nezvolil ke spuštění.
task_status wait() const;
Návratová hodnota
Hodnota task_status
, která může být buď completed
nebo canceled
. Pokud úloha při provádění zjistila výjimku nebo byla do ní rozšířena z úlohy s výjimkou s výjimkou z předpočítané úlohy, wait
vyvolá se tato výjimka.
Poznámky
Důležité
V aplikaci Univerzální platforma Windows (UPW) nevolejte wait
kód, který běží ve vlákně uživatelského rozhraní. Jinak modul runtime vyvolá souběžnost::invalid_operation , protože tato metoda blokuje aktuální vlákno a může způsobit, že aplikace přestane reagovat. Můžete však volat metodu concurrency::task::get , která obdrží výsledek úlohy stecedent v pokračování založeném na úkolu.