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

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.

Viz také

concurrency – obor názvů