Dela via


aktivitetsklass (Samtidighetskörning)

Klassen Parallel Patterns Library (PPL). task Ett task objekt representerar arbete som kan köras asynkront och samtidigt med andra uppgifter och parallellt arbete som produceras av parallella algoritmer i Concurrency Runtime. Det ger ett resultat av typen _ResultType vid slutförande. Uppgifter av typen task<void> ger inget resultat. En uppgift kan vänta på och avbrytas oberoende av andra uppgifter. Den kan också bestå av andra uppgifter med hjälp av fortsättningsmönster(then) och kopplingsmönster(when_all) och choice(when_any). När ett aktivitetsobjekt tilldelas till en ny variabel är beteendet för std::shared_ptr. Med andra ord representerar båda objekten samma underliggande uppgift.

Syntax

template <>
class task<void>;

template<typename _ResultType>
class task;

Parameterar

_ResultType
Typen av resultat som aktiviteten genererar.

Medlemmar

Offentliga typedefs

Namn Beskrivning
result_type Typen av resultat som ett objekt i den här klassen genererar.

Offentliga konstruktorer

Namn Beskrivning
uppgift Överbelastad. Konstruerar ett task objekt.

Offentliga metoder

Namn Beskrivning
Överbelastad. Returnerar resultatet som den här aktiviteten skapade. Om aktiviteten inte är i ett terminaltillstånd väntar ett anrop till på att get aktiviteten ska slutföras. Den här metoden returnerar inte ett värde när den anropas för en aktivitet med en result_type av void.
is_apartment_aware Avgör om uppgiften skriver upp ett Windows Runtime-gränssnitt IAsyncInfo eller är fallande från en sådan aktivitet.
is_done Avgör om aktiviteten har slutförts.
Scheduler Returnerar schemaläggaren för den här aktiviteten
Överbelastad. Lägger till en fortsättningsaktivitet i den här aktiviteten.
Vänta Väntar på att den här uppgiften ska nå ett terminaltillstånd. Det är möjligt att wait köra uppgiften infogad, om alla aktivitetsberoenden är uppfyllda och inte redan har hämtats för körning av en bakgrundsarbetare.

Offentliga operatörer

Namn Beskrivning
operator!= Överbelastad. Avgör om två task objekt representerar olika interna uppgifter.
operator= Överbelastad. Ersätter innehållet i ett objekt med ett task annat.
operator== Överbelastad. Avgör om två task objekt representerar samma interna uppgift.

Anmärkningar

Mer information finns i aktivitetsparallellitet.

Arvshierarki

task

Kravspecifikation

Rubrik: ppltasks.h

namnområde: samtidighet

Returnerar resultatet som den här aktiviteten skapade. Om aktiviteten inte är i ett terminaltillstånd väntar ett anrop till på att get aktiviteten ska slutföras. Den här metoden returnerar inte ett värde när den anropas för en aktivitet med en result_type av void.

_ResultType get() const;

void get() const;

Returvärde

Resultatet av uppgiften.

Anmärkningar

Om uppgiften avbryts utlöser ett anrop till get ett task_canceled undantag. Om uppgiften påträffade ett annat undantag eller om ett undantag spreds till den från en tidigare uppgift, utlöser ett anrop till get det undantaget.

Viktigt!

I en UWP-app (Universal Windows Platform) ska du inte anropa samtidighet::uppgift::vänta eller get (wait anrop get) i kod som körs i tråden för användargränssnittet. Annars genererar körningen samtidighet::invalid_operation eftersom dessa metoder blockerar den aktuella tråden och kan leda till att appen inte svarar. Du kan dock anropa get metoden för att ta emot resultatet av den föregående aktiviteten i en aktivitetsbaserad fortsättning eftersom resultatet är omedelbart tillgängligt.

is_apartment_aware

Avgör om uppgiften skriver upp ett Windows Runtime-gränssnitt IAsyncInfo eller är fallande från en sådan aktivitet.

bool is_apartment_aware() const;

Returvärde

true om uppgiften skriver upp ett IAsyncInfo gränssnitt eller har härstammar från en sådan uppgift, false annars.

task::is_done Method (Concurrency Runtime)

Avgör om aktiviteten har slutförts.

bool is_done() const;

Returvärde

Sant om aktiviteten har slutförts, annars falskt.

Anmärkningar

Funktionen returnerar sant om aktiviteten har slutförts eller avbrutits (med eller utan användarfel).

operator!=

Avgör om två task objekt representerar olika interna uppgifter.

bool operator!= (const task<_ResultType>& _Rhs) const;

bool operator!= (const task<void>& _Rhs) const;

Parameterar

_Rhs
Den uppgift som ska jämföras.

Returvärde

true om objekten refererar till olika underliggande uppgifter och false på annat sätt.

operator=

Ersätter innehållet i ett objekt med ett task annat.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

Parameterar

_Annan
Källobjektet task.

Returvärde

Anmärkningar

Som task fungerar som en smart pekare representerar objekten task samma faktiska uppgift som _Other när en kopieringstilldelning har tilldelats.

operator==

Avgör om två task objekt representerar samma interna uppgift.

bool operator== (const task<_ResultType>& _Rhs) const;

bool operator== (const task<void>& _Rhs) const;

Parameterar

_Rhs
Den uppgift som ska jämföras.

Returvärde

true om objekten refererar till samma underliggande uppgift och false i annat fall.

task::scheduler Method (Concurrency Runtime)

Returnerar schemaläggaren för den här aktiviteten

scheduler_ptr scheduler() const;

Returvärde

En pekare till schemaläggaren

uppgift

Konstruerar ett task 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);

Parameterar

T
Typen av parameter som uppgiften ska konstrueras från.

_Param
Parametern som uppgiften ska konstrueras från. Det kan vara en lambda, ett funktionsobjekt, ett task_completion_event<result_type> objekt eller en Windows::Foundation::IAsyncInfo om du använder uppgifter i Windows Runtime-appen. Lambda- eller funktionsobjektet ska vara en typ som motsvarar std::function<X(void)>, där X kan vara en variabel av typen result_type, task<result_type>eller en Windows::Foundation::IAsyncInfo i Windows Runtime-appar.

_TaskOptions
Aktivitetsalternativen inkluderar annulleringstoken, schemaläggaren osv.

_Annan
Källobjektet task.

Anmärkningar

Standardkonstruktorn för en task finns bara för att tillåta att uppgifter används i containrar. Det går inte att använda en standardkonstruerad aktivitet förrän du tilldelar en giltig aktivitet till den. Metoder som get, wait eller then utlöser ett invalid_argument undantag när det anropas för en standardkonstruerad uppgift.

En uppgift som skapas från en task_completion_event slutförs (och har dess fortsättningar schemalagda) när aktivitetens slutförandehändelse har angetts.

Den version av konstruktorn som tar en annulleringstoken skapar en uppgift som kan avbrytas med hjälp av token cancellation_token_source som hämtades från. Uppgifter som skapats utan en annulleringstoken kan inte avbrytas.

Uppgifter som skapats från ett Windows::Foundation::IAsyncInfo gränssnitt eller en lambda som returnerar ett IAsyncInfo gränssnitt når sitt terminaltillstånd när den omslutna asynkrona Windows Runtime-åtgärden slutförs. På samma sätt returnerar uppgifter som skapats från en lambda ett task<result_type> nå deras terminaltillstånd när den inre aktiviteten når sitt terminaltillstånd och inte när lambda returnerar.

task beter sig som en smart pekare och är säker att skicka runt efter värde. Det kan nås av flera trådar utan att behöva lås.

Konstruktorn överbelastas med ett Windows::Foundation::IAsyncInfo-gränssnitt eller en lambda som returnerar ett sådant gränssnitt, är endast tillgängliga för Windows Runtime-appar.

Mer information finns i aktivitetsparallellitet.

sedan...

Lägger till en fortsättningsaktivitet i den här aktiviteten.

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;

Parameterar

_Funktion
Typen av funktionsobjekt som ska anropas av den här uppgiften.

_Func
Fortsättningsfunktionen som ska köras när den här uppgiften slutförs. Den här fortsättningsfunktionen måste ta som indata en variabel av antingen result_type eller task<result_type>, där result_type är den typ av resultat som aktiviteten genererar.

_TaskOptions
Aktivitetsalternativen omfattar annulleringstoken, schemaläggaren och fortsättningskontexten. Som standard ärvs de tidigare 3 alternativen från den föregående aktiviteten

_CancellationToken
Annulleringstoken som ska associeras med fortsättningsaktiviteten. En fortsättningsaktivitet som skapas utan en annulleringstoken ärver token för den tidigare uppgiften.

_ContinuationContext
En variabel som anger var fortsättningen ska köras. Den här variabeln är bara användbar när den används i en UWP-app. Mer information finns i task_continuation_context

Returvärde

Den nyskapade fortsättningsaktiviteten. Resultattypen för den returnerade aktiviteten bestäms av vad som _Func returneras.

Anmärkningar

Överlagringarna av then den tar en lambda eller en functor som returnerar ett Windows::Foundation::IAsyncInfo-gränssnitt, är endast tillgängliga för Windows Runtime-appar.

Mer information om hur du använder aktivitetsfortsättningar för att skapa asynkront arbete finns i Aktivitetsparallellitet.

vänta

Väntar på att den här uppgiften ska nå ett terminaltillstånd. Det är möjligt att wait köra uppgiften infogad, om alla aktivitetsberoenden är uppfyllda och inte redan har hämtats för körning av en bakgrundsarbetare.

task_status wait() const;

Returvärde

Ett task_status värde som kan vara antingen completed eller canceled. Om uppgiften påträffade ett undantag under körningen, eller om ett undantag spreds till den från en tidigare uppgift, wait utlöser det undantaget.

Anmärkningar

Viktigt!

I en UWP-app (Universal Windows Platform) anropar wait du inte kod som körs i användargränssnittstråden. Annars genererar körningen samtidighet::invalid_operation eftersom den här metoden blockerar den aktuella tråden och kan leda till att appen inte svarar. Du kan dock anropa metoden concurrency::task::get för att ta emot resultatet av den tidigare aktiviteten i en aktivitetsbaserad fortsättning.

Se även

samtidighetsnamnområde