Sdílet prostřednictvím


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 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.

Viz také

concurrency – obor názvů