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 může být čekán na dokončení a zrušen 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 jako v std::shared_ptr; 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é typové definice
| 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. Konstruuje objekt task. |
Veřejné metody
| Název | Popis |
|---|---|
| získej | Přetíženo. Vrátí výsledek této úlohy. Pokud úkol není v terminálovém stavu, volání 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í rozhraní Windows Runtime IAsyncInfo nebo je od něj odvozen. |
| is_done | Určuje, zda je úkol dokončen. |
| plánovač | Vrátí plánovač pro tuto úlohu. |
| potom | Přetíženo. Přidá pokračovací úkol k tomuto úkolu. |
| Počkej | Čeká, až úkol dosáhne konečného stavu. Pokud jsou všechny závislosti úkolu splněné, je možné vloženě spustit wait, pokud ho pracovní proces na pozadí 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 Paralelismu úkolů.
Hierarchie dědičnosti
task
Požadavky
Hlavička: ppltasks.h
Obor názvů: souběžnost
get
Vrátí výsledek této úlohy. Pokud úkol není v terminálovém stavu, volání 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 narazila na jinou výjimku nebo byla na ni předána z předchozí úlohy, volání get vyvolá tuto výjimku.
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, což může způsobit, že aplikace přestane reagovat. Můžete však volat metodu get, abyste obdrželi výsledek předchozí úlohy v pokračování založeném na úloze, protože výsledek je okamžitě k dispozici.
is_apartment_aware
Určuje, zda úloha rozbalí rozhraní Windows Runtime IAsyncInfo nebo je od něj odvozen.
bool is_apartment_aware() const;
Návratová hodnota
true pokud úkol rozbalí IAsyncInfo rozhraní nebo je odvozený 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 k porovnání.
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
Protože task se chová jako inteligentní ukazatel, po kopírovacím přiřazení tyto task objekty představují stejný skutečný úkol jako _Other.
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 k porovnání.
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
Konstruuje objekt task.
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 zahrnují token pro 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, wait nebo then, vyvolají výjimku invalid_argument při volání úlohy vytvořené pomocí výchozího konstruktoru.
Ú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, ze kterého byl cancellation_token_source získán. Úlohy vytvořené bez tokenu zrušení nelze zrušit.
Úlohy vytvořené z Windows::Foundation::IAsyncInfo rozhraní nebo z lambda funkce, která vrátí IAsyncInfo rozhraní, dosáhnou svého koncového stavu, když asynchronní operace nebo akce Windows Runtime uvnitř nich skončí. Podobně úlohy vytvořené z lambdy, které vracejí task<result_type>, dosáhnou svého konečného stavu, když vnitřní úkol dosáhne svého konečného stavu, a ne když lambda vrátí.
task chová se jako inteligentní ukazatel a je bezpečný pro předávání podle hodnoty. Může být přístupné více vlákny bez nutnosti použití zámků.
Přetížení konstruktory, které přebírají rozhraní Windows::Foundation::IAsyncInfo nebo lambda vracející takové rozhraní, jsou k dispozici pouze pro aplikace Windows Runtime.
Další informace naleznete v Paralelismu úkolů.
pak ...
Přidá pokračovací úkol k tomuto ú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 tyto 3 možnosti zděděny z předchozí úlohy.
_CancellationToken
Token zrušení, který se má přidružit k následné úloze. Úloha pokračování, která se vytvoří bez tokenu zrušení, zdědí token úlohy, která jí předchází.
_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ý pokračující úkol. Typ výsledku vráceného úkolu je určen tím, co vrátí _Func.
Poznámky
Přetížení then, která přebírají lambdu nebo functor, které vrací rozhraní Windows::Foundation::IAsyncInfo, jsou k dispozici pouze v aplikacích pro Windows Runtime.
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á, až úkol dosáhne konečného stavu. Pokud jsou všechny závislosti úkolu splněné, je možné vloženě spustit wait, pokud ho pracovní proces na pozadí 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 pokud byla do ní přenesena výjimka z předchozí úlohy, wait vyvolá tuto výjimku.
Poznámky
Důležité
V aplikaci na Univerzální platformě Windows (UWP) nevolejte wait v kódu, který běží ve vlákně uživatelského rozhraní. Jinak runtime vyvolá Concurrency::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, abyste získali výsledek nadřazené úlohy v pokračování založeném na úloze.