Condividi tramite


Classe task (runtime di concorrenza)

Classe task Parallel Patterns Library (PPL). Un task oggetto rappresenta il lavoro che può essere eseguito in modo asincrono e simultaneo con altre attività e il lavoro parallelo prodotto da algoritmi paralleli nel runtime di concorrenza. Produce un risultato di tipo _ResultType dopo il corretto completamento. Le attività di tipo task<void> non producono risultati. È possibile attendere il completamento di un'attività e annullarla indipendentemente da altre attività. Può anche essere composto con altre attività usando continuazioni( then) e join( ) e criteri choice( when_anywhen_all). Quando un oggetto attività viene assegnato a una nuova variabile, il comportamento è quello di std::shared_ptr. In altre parole, entrambi gli oggetti rappresentano la stessa attività sottostante.

Sintassi

template <>
class task<void>;

template<typename _ResultType>
class task;

Parametri

_ResultType
Tipo del risultato prodotto dall'attività.

Membri

Typedef pubblici

Nome Descrizione
result_type Il tipo del risultato prodotto da un oggetto di questa classe.

Costruttori pubblici

Nome Descrizione
compito Con overload. Costruisce un oggetto task.

Metodi pubblici

Nome Descrizione
get Con overload. Restituisce il risultato generato da questa attività. Se l'attività non è in uno stato terminale, una chiamata a get attenderà il completamento dell'attività. Questo metodo non restituisce un valore quando viene chiamato su un'attività con un result_typevoid.
is_apartment_aware Determina se l'attività annulla il wrapping di un'interfaccia IAsyncInfo di Windows Runtime o discende da tale attività.
is_done Determina se l'attività è stata completata.
Pianificazione Restituisce l'utilità di pianificazione per questa attività
then Con overload. Aggiunge un'attività di continuazione a questa attività.
aspettare Attende che l'attività raggiunga uno stato finale. È possibile che tramite wait l'attività venga eseguita inline, se tutte le dipendenze di attività vengono soddisfatte e non è già stato selezionato per l'esecuzione da un processo di lavoro in background.

Operatori pubblici

Nome Descrizione
operator!= Con overload. Determina se due oggetti task rappresentano attività interne diverse.
operator= Con overload. Sostituisce il contenuto di un oggetto task con un altro.
operator== Con overload. Determina se due oggetti task rappresentano la stessa attività interna.

Osservazioni:

Per altre informazioni, vedere Parallelismo delle attività.

Gerarchia di ereditarietà

task

Requisiti

Intestazione: ppltasks.h

Spazio dei nomi: Concurrency

get

Restituisce il risultato generato da questa attività. Se l'attività non è in uno stato terminale, una chiamata a get attenderà il completamento dell'attività. Questo metodo non restituisce un valore quando viene chiamato su un'attività con un result_typevoid.

_ResultType get() const;

void get() const;

Valore restituito

Risultato dell'attività.

Osservazioni:

Se l'attività viene annullata, una chiamata a get genererà un'eccezione task_canceled . Se l'attività ha rilevato un'eccezione diversa o un'eccezione è stata propagata a essa da un'attività precedente, una chiamata a get genererà questa eccezione.

Importante

In un'app piattaforma UWP (Universal Windows Platform) (UWP) non chiamare concurrency::task::wait o get ( wait chiamate get) nel codice eseguito nel thread dell'interfaccia utente. In caso contrario, il runtime genera concorrenza::invalid_operation perché questi metodi bloccano il thread corrente e possono causare la mancata risposta dell'app. Tuttavia, è possibile chiamare il get metodo per ricevere il risultato dell'attività precedente in una continuazione basata su attività perché il risultato è immediatamente disponibile.

is_apartment_aware

Determina se l'attività annulla il wrapping di un'interfaccia IAsyncInfo di Windows Runtime o discende da tale attività.

bool is_apartment_aware() const;

Valore restituito

true se l'attività annulla il wrapping di un'interfaccia IAsyncInfo o viene discendente da tale attività, false in caso contrario.

Metodo task::is_done (runtime di concorrenza)

Determina se l'attività è stata completata.

bool is_done() const;

Valore restituito

True se l'attività è stata completata, false in caso contrario.

Osservazioni:

La funzione restituisce true se l'attività viene completata o annullata (con o senza eccezione utente).

operator!=

Determina se due oggetti task rappresentano attività interne diverse.

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

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

Parametri

_Rhs
Attività da confrontare.

Valore restituito

true se gli oggetti fanno riferimento a attività sottostanti diverse e false in caso contrario.

operator=

Sostituisce il contenuto di un oggetto task con un altro.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

Parametri

_Altro
Oggetto task di origine.

Valore restituito

Osservazioni:

Dato che task si comporta come un puntatore intelligente, dopo un'operazione di assegnazione di copia, questo oggetto task rappresenta la stessa attività effettiva di _Other.

operator==

Determina se due oggetti task rappresentano la stessa attività interna.

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

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

Parametri

_Rhs
Attività da confrontare.

Valore restituito

true se gli oggetti fanno riferimento alla stessa attività sottostante e false in caso contrario.

Metodo task::scheduler (runtime di concorrenza)

Restituisce l'utilità di pianificazione per questa attività

scheduler_ptr scheduler() const;

Valore restituito

Puntatore all'utilità di pianificazione

attività

Costruisce un oggetto 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);

Parametri

T
Tipo del parametro dal quale deve essere costruita l'attività.

_Param
Parametro dal quale deve essere costruita l'attività. Può trattarsi di un'espressione lambda, di un oggetto funzione, di un task_completion_event<result_type> oggetto o di Windows::Foundation::IAsyncInfo se si usano attività nell'app di Windows Runtime. L'oggetto lambda o funzione deve essere un tipo equivalente a std::function<X(void)>, dove X può essere una variabile di tipo result_type, task<result_type>o Windows::Foundation::IAsyncInfo nelle app di Windows Runtime.

_TaskOptions
Le opzioni dell'attività includono il token di annullamento, l'utilità di pianificazione e così via

_Altro
Oggetto task di origine.

Osservazioni:

Il costruttore predefinito per task è presente solo per consentire l'utilizzo delle attività di essere all'interno di contenitori. Un'attività costruita predefinita non può essere utilizzata fino a quando non le verrà assegnata un'attività valida. Metodi come get, wait o then genereranno un'eccezione invalid_argument quando viene chiamato in un'attività costruita predefinita.

Un'attività creata da task_completion_event verrà completata (e le relative continuazioni verranno pianificate) una volta impostato l'evento di completamento dell'attività.

La versione del costruttore che accetta un token di annullamento crea un'attività che può essere annullata utilizzando il cancellation_token_source da cui è stato ottenuto il token. Le attività create senza un token di annullamento non sono annullabili.

Le attività create da un'interfaccia Windows::Foundation::IAsyncInfo o un'espressione lambda che restituisce un'interfaccia IAsyncInfo raggiungono lo stato finale quando l'operazione o l'azione asincrona di Windows Runtime racchiusa viene completata. Analogamente, le attività create da un'espressione lambda che restituisce uno task<result_type> stato terminale quando l'attività interna raggiunge lo stato del terminale e non quando viene restituita l'espressione lambda.

task si comporta come un puntatore intelligente e viene passato in modo sicuro per valore. È possibile accedervi da più thread senza la necessità di blocchi.

Gli overload del costruttore che accettano un'interfaccia Windows::Foundation::IAsyncInfo o un'espressione lambda che restituisce tale interfaccia sono disponibili solo per le app di Windows Runtime.

Per altre informazioni, vedere Parallelismo delle attività.

then

Aggiunge un'attività di continuazione a questa attività.

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;

Parametri

_Funzione
Tipo dell'oggetto funzione che sarà richiamato da questa attività.

_Func
Funzione di continuazione da eseguire quando questa attività viene completata. Questa funzione di continuazione deve accettare come input una variabile oppure result_type o task<result_type>, dove result_type è il tipo di risultato prodotto da questa attività.

_TaskOptions
Le opzioni di attività includono il token di annullamento, l'utilità di pianificazione e il contesto di continuazione. Per impostazione predefinita, le precedenti 3 opzioni vengono ereditate dall'attività precedente

_CancellationToken
Token di annullamento da associare all'attività di continuazione. Un'attività di continuazione creata senza un token di annullamento erediterà il token della relativa attività precedente.

_ContinuationContext
Variabile che specifica la posizione in cui deve essere eseguita la continuazione. Questa variabile è utile solo se usata in un'app UWP. Per altre informazioni, vedere task_continuation_context

Valore restituito

L'attività di continuazione appena creata. Il tipo di risultato dell'attività restituita è determinato da ciò che viene restituito da _Func.

Osservazioni:

Gli overload di then che accettano un'espressione lambda o un functor che restituisce un'interfaccia Windows::Foundation::IAsyncInfo sono disponibili solo per le app di Windows Runtime.

Per altre informazioni su come usare le continuazioni di attività per comporre il lavoro asincrono, vedere Task Parallelism.

wait

Attende che l'attività raggiunga uno stato finale. È possibile che tramite wait l'attività venga eseguita inline, se tutte le dipendenze di attività vengono soddisfatte e non è già stato selezionato per l'esecuzione da un processo di lavoro in background.

task_status wait() const;

Valore restituito

Valore task_status che potrebbe essere completed o canceled. Se l'attività ha rilevato un'eccezione durante l'esecuzione o un'eccezione è stata propagata a essa da un'attività precedente, l'oggetto wait genererà questa eccezione.

Osservazioni:

Importante

In un'app piattaforma UWP (Universal Windows Platform) (UWP) non chiamare wait il codice eseguito nel thread dell'interfaccia utente. In caso contrario, il runtime genera concurrency::invalid_operation poiché questo metodo blocca il thread corrente e può provocare la mancata risposta da parte dell'app. È tuttavia possibile chiamare il metodo concurrency::task::get per ricevere il risultato dell'attività antecedente in una continuazione basata su attività.

Vedi anche

Spazio dei nomi concurrency