Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í vzorů pokračování(then) a spojení (when_all) a výběru(when_any). Pokud je objekt úkolu přiřazen k nové proměnné, chování je std::shared_ptrto ; 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 |
|---|---|
| získej | 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
Obor názvů: souběžnost
získat
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í platformy Windows (UPW) nevolejte souběžnost::task::wait nebo get (wait volání get) v kódu, který běží na 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 getje , 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.
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í.
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.