task — Klasa (współbieżność środowiska wykonawczego)
Klasa PPL (Parallel Patterns Library). task
task
Obiekt reprezentuje pracę, którą można wykonać asynchronicznie i współbieżnie z innymi zadaniami i równoległymi zadaniami utworzonymi przez algorytmy równoległe w środowisku uruchomieniowym współbieżności. Daje wynik typu _ResultType
po pomyślnym zakończeniu. Zadania typu task<void>
nie generują żadnych wyników. Zadanie można czekać i anulować niezależnie od innych zadań. Może również składać się z innych zadań przy użyciu kontynuacji ( then
), i join( when_all
) i choice( when_any
) wzorców. Gdy obiekt zadania jest przypisywany do nowej zmiennej, zachowanie jest takie jak std::shared_ptr
; innymi słowy, oba obiekty reprezentują to samo zadanie bazowe.
Składnia
template <>
class task<void>;
template<typename _ResultType>
class task;
Parametry
_ResultType
Typ wyniku generowanego przez zadanie.
Elementy członkowskie
Definicje typów publicznych
Nazwa/nazwisko | opis |
---|---|
result_type |
Typ wyniku generowany przez obiekt tej klasy. |
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
zadanie | Przeciążone. task Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
get | Przeciążone. Zwraca wynik wygenerowany przez to zadanie. Jeśli zadanie nie znajduje się w stanie terminalu, wywołanie zadania będzie czekać get na zakończenie zadania. Ta metoda nie zwraca wartości, gdy jest wywoływana w zadaniu z wartością result_type void . |
is_apartment_aware | Określa, czy zadanie odpakowuje interfejs środowisko wykonawcze systemu WindowsIAsyncInfo , czy jest malejąco od takiego zadania. |
is_done | Określa, czy zadanie zostało ukończone. |
Harmonogram | Zwraca harmonogram dla tego zadania |
a następnie | Przeciążone. Dodaje zadanie kontynuacji do tego zadania. |
czekać | Czeka na osiągnięcie stanu terminalu tego zadania. Istnieje możliwość wait wykonania zadania wbudowanego, jeśli wszystkie zależności zadań są spełnione i nie zostały jeszcze pobrane do wykonania przez proces roboczy w tle. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
operator!= | Przeciążone. Określa, czy dwa task obiekty reprezentują różne zadania wewnętrzne. |
operator = | Przeciążone. Zamienia zawartość jednego task obiektu na inny. |
operator== | Przeciążone. Określa, czy dwa task obiekty reprezentują to samo zadanie wewnętrzne. |
Uwagi
Aby uzyskać więcej informacji, zobacz Równoległość zadań.
Hierarchia dziedziczenia
task
Wymagania
Nagłówek: ppltasks.h
Przestrzeń nazw: współbieżność
get
Zwraca wynik wygenerowany przez to zadanie. Jeśli zadanie nie znajduje się w stanie terminalu, wywołanie zadania będzie czekać get
na zakończenie zadania. Ta metoda nie zwraca wartości, gdy jest wywoływana w zadaniu z wartością result_type
void
.
_ResultType get() const;
void get() const;
Wartość zwracana
Wynik zadania.
Uwagi
Jeśli zadanie zostanie anulowane, wywołanie get
metody zgłosi wyjątek task_canceled . Jeśli zadanie napotkało inny wyjątek lub został do niego rozpropagowany z wcześniejszego zadania, wywołanie get
metody zgłasza ten wyjątek.
Ważne
W aplikacji platforma uniwersalna systemu Windows (UWP) nie należy wywoływać współbieżności::task::wait lub get
( wait
wywołań get
) w kodzie uruchamianym w wątku interfejsu użytkownika. W przeciwnym razie środowisko uruchomieniowe zgłasza współbieżność::invalid_operation , ponieważ te metody blokują bieżący wątek i mogą spowodować, że aplikacja przestanie odpowiadać. Można jednak wywołać metodę get
, aby otrzymać wynik zadania przeddentowego w kontynuacji opartej na zadaniach, ponieważ wynik jest natychmiast dostępny.
is_apartment_aware
Określa, czy zadanie odpakowuje interfejs środowisko wykonawcze systemu WindowsIAsyncInfo
, czy jest malejąco od takiego zadania.
bool is_apartment_aware() const;
Wartość zwracana
true
jeśli zadanie odpakowuje IAsyncInfo
interfejs lub jest malejąco z takiego zadania, false
w przeciwnym razie.
task::is_done, metoda (środowisko uruchomieniowe współbieżności)
Określa, czy zadanie zostało ukończone.
bool is_done() const;
Wartość zwracana
Wartość True, jeśli zadanie zostało ukończone, w przeciwnym razie wartość false.
Uwagi
Funkcja zwraca wartość true, jeśli zadanie zostało ukończone lub anulowane (z wyjątkiem użytkownika lub bez tego wyjątku).
operator!=
Określa, czy dwa task
obiekty reprezentują różne zadania wewnętrzne.
bool operator!= (const task<_ResultType>& _Rhs) const;
bool operator!= (const task<void>& _Rhs) const;
Parametry
_Rhs
Zadanie do porównania.
Wartość zwracana
true
jeśli obiekty odwołują się do różnych zadań bazowych i false
w inny sposób.
operator =
Zamienia zawartość jednego task
obiektu na inny.
task& operator= (const task& _Other);
task& operator= (task&& _Other);
Parametry
_Inny
Obiekt źródłowy task
.
Wartość zwracana
Uwagi
Jak task
zachowuje się jak inteligentny wskaźnik, po przypisaniu kopii ten task
obiekt reprezentuje to samo rzeczywiste zadanie, co _Other
w przypadku.
operator==
Określa, czy dwa task
obiekty reprezentują to samo zadanie wewnętrzne.
bool operator== (const task<_ResultType>& _Rhs) const;
bool operator== (const task<void>& _Rhs) const;
Parametry
_Rhs
Zadanie do porównania.
Wartość zwracana
true
jeśli obiekty odwołują się do tego samego zadania bazowego i false
w przeciwnym razie.
task::scheduler, metoda (środowisko uruchomieniowe współbieżności)
Zwraca harmonogram dla tego zadania
scheduler_ptr scheduler() const;
Wartość zwracana
Wskaźnik do harmonogramu
task
task
Tworzy obiekt.
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, z którego ma zostać skonstruowane zadanie.
_Param
Parametr, z którego ma zostać skonstruowane zadanie. Może to być lambda, obiekt funkcji, task_completion_event<result_type>
obiekt lub Windows::Foundation::IAsyncInfo, jeśli używasz zadań w aplikacji środowisko wykonawcze systemu Windows. Obiekt lambda lub funkcji powinien być typem równoważnym std::function<X(void)>
, gdzie X może być zmienną typu result_type
, task<result_type>
lub Windows::Foundation::IAsyncInfo w aplikacjach środowisko wykonawcze systemu Windows.
_TaskOptions
Opcje zadania obejmują token anulowania, harmonogram itp.
_Inny
Obiekt źródłowy task
.
Uwagi
Domyślny konstruktor obiektu task
jest obecny tylko w celu umożliwienia użycia zadań w kontenerach. Nie można użyć domyślnego skonstruowanego zadania do momentu przypisania do niego prawidłowego zadania. Metody, takie jak get
, wait
lub then
zgłaszają wyjątek invalid_argument , gdy jest wywoływany w domyślnym skonstruowanych zadaniach.
Zadanie utworzone na podstawie task_completion_event
zadania zostanie ukończone (i ma zaplanowane kontynuacje) po ustawieniu zdarzenia ukończenia zadania.
Wersja konstruktora, który przyjmuje token anulowania, tworzy zadanie, z którego można anulować, używając tokenu cancellation_token_source
. Zadania utworzone bez tokenu anulowania nie można anulować.
Zadania utworzone na podstawie interfejsu Windows::Foundation::IAsyncInfo
lub lambda, które zwracają IAsyncInfo
interfejs, osiągną stan terminalu po zakończeniu zamkniętej środowisko wykonawcze systemu Windows asynchronicznej operacji lub akcji. Podobnie zadania utworzone na podstawie lambda, które zwracają task<result_type>
stan terminalu, gdy zadanie wewnętrzne osiągnie stan terminalu, a nie wtedy, gdy funkcja lambda zwróci wartość .
task
zachowuje się jak inteligentny wskaźnik i jest bezpieczny do przekazywania według wartości. Dostęp do niego można uzyskać za pomocą wielu wątków bez konieczności blokowania.
Przeciążenia konstruktora, które przyjmują interfejs Windows::Foundation::IAsyncInfo lub lambda zwracający taki interfejs, są dostępne tylko dla środowisko wykonawcze systemu Windows aplikacji.
Aby uzyskać więcej informacji, zobacz Równoległość zadań.
then …
Dodaje zadanie kontynuacji do tego zadania.
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
_Funkcja
Typ obiektu funkcji, który zostanie wywołany przez to zadanie.
_Func
Funkcja kontynuacji do wykonania po zakończeniu tego zadania. Ta funkcja kontynuacji musi przyjmować jako dane wejściowe zmiennej result_type
lub task<result_type>
, gdzie result_type
jest typem wyniku, który generuje to zadanie.
_TaskOptions
Opcje zadania obejmują token anulowania, harmonogram i kontekst kontynuacji. Domyślnie poprzednie 3 opcje są dziedziczone z zadania antecedent
_CancellationToken
Token anulowania do skojarzenia z zadaniem kontynuacji. Zadanie kontynuacji, które jest tworzone bez tokenu anulowania, dziedziczy token zadania przedzibowego.
_ContinuationContext
Zmienna określająca, gdzie ma zostać wykonana kontynuacja. Ta zmienna jest przydatna tylko w przypadku użycia w aplikacji platformy UWP. Aby uzyskać więcej informacji, zobacz task_continuation_context
Wartość zwracana
Nowo utworzone zadanie kontynuacji. Typ wyniku zwróconego zadania zależy od _Func
zwracanych wartości.
Uwagi
Przeciążeniathen
, które przyjmują interfejs lambda lub functor, który zwraca interfejs Windows::Foundation::IAsyncInfo, są dostępne tylko dla środowisko wykonawcze systemu Windows aplikacji.
Aby uzyskać więcej informacji na temat używania kontynuacji zadań do tworzenia pracy asynchronicznej, zobacz Równoległość zadań.
wait
Czeka na osiągnięcie stanu terminalu tego zadania. Istnieje możliwość wait
wykonania zadania wbudowanego, jeśli wszystkie zależności zadań są spełnione i nie zostały jeszcze pobrane do wykonania przez proces roboczy w tle.
task_status wait() const;
Wartość zwracana
task_status
Wartość, która może mieć completed
wartość lub canceled
. Jeśli zadanie napotkało wyjątek podczas wykonywania lub został do niego rozpropagowany wyjątek z zadania przedzibowego, wait
zgłosi ten wyjątek.
Uwagi
Ważne
W aplikacji platforma uniwersalna systemu Windows (UWP) nie należy wywoływać wait
kodu uruchamianego w wątku interfejsu użytkownika. W przeciwnym razie środowisko uruchomieniowe zgłasza współbieżność::invalid_operation , ponieważ ta metoda blokuje bieżący wątek i może spowodować, że aplikacja przestanie odpowiadać. Można jednak wywołać metodę concurrency::task::get , aby otrzymać wynik zadania przedzibowego w kontynuacji opartej na zadaniach.