Udostępnij za pośrednictwem


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.

Zobacz też

Przestrzeń nazw współbieżności