Freigeben über


task-Klasse (Concurrency Runtime)

Die Parallel Patterns Library (PPL) task-Klasse. Ein task Objekt stellt Arbeit dar, die asynchron und gleichzeitig mit anderen Aufgaben und parallelen Arbeiten ausgeführt werden kann, die von parallelen Algorithmen in der Parallelitätslaufzeit erstellt werden. Es enthält bei erfolgreichem Abschluss ein Ergebnis vom Typ _ResultType. Tasks des Typs task<void> führen zu keinem Ergebnis. Eine Aufgabe kann erwartet und unabhängig von anderen Aufgaben abgebrochen werden. Sie kann auch mit anderen Aufgaben unter Verwendung von Fortsetzungen( then) und Join( when_all) und Auswahl( when_any) -Mustern zusammengesetzt werden. Wenn einem Aufgabenobjekt eine neue Variable zugewiesen wird, ist das Verhalten das von std::shared_ptr; mit anderen Worten, beide Objekte stellen dieselbe zugrunde liegende Aufgabe dar.

Syntax

template <>
class task<void>;

template<typename _ResultType>
class task;

Parameter

_ResultType
Der Typ des Ergebnisses, das der Vorgang erzeugt.

Member

Öffentliche Typedefs

Name Beschreibung
result_type Der Typ des von einem Objekt dieser Klasse erstellten Ergebnisses.

Öffentliche Konstruktoren

Name Beschreibung
Aufgabe Überladen. Erstellt ein task-Objekt.

Öffentliche Methoden

Name Beschreibung
get Überladen. Gibt das von diesem Task erstellte Ergebnis zurück. Wenn sich die Aufgabe nicht in einem abschließenden Zustand befindet, wird mit dem get-Aufruf gewartet, bis die Aufgabe fertig gestellt wurde. Diese Methode gibt bei dem Aufruf einer Aufgabe mit einem result_type von void keinen Wert zurück.
is_apartment_aware Bestimmt, ob der Task eine IAsyncInfo-Schnittstelle der Windows Runtime entpackt oder von einem solchen Task abgeleitet wurde.
is_done Bestimmt, ob die Aufgabe abgeschlossen wurde.
Planer Gibt den Planer für diesen Task zurück.
then Überladen. Fügt diesem Task einen Fortsetzungstask hinzu.
wait Erwartet, dass dieser Task einen Terminalzustand erreicht. Es ist möglich, dass das wait-Element den Task inline ausführt, wenn alle Taskabhängigkeiten erfüllt sind und er nicht bereits zur Ausführung durch einen Hintergrundworker aufgehoben wurde.

Öffentliche Operatoren

Name Beschreibung
operator!= Überladen. Bestimmt, ob zwei task-Objekte unterschiedliche interne Aufgaben darstellen.
operator= Überladen. Ersetzt den Inhalt eines task-Objekts durch einen anderen.
operator== Überladen. Bestimmt, ob zwei task-Objekte die gleiche interne Aufgabe darstellen.

Hinweise

Weitere Informationen finden Sie unter Task Parallelism.

Vererbungshierarchie

task

Anforderungen

Kopfzeile: ppltasks.h

Namespace: Parallelität

get

Gibt das von diesem Task erstellte Ergebnis zurück. Wenn sich die Aufgabe nicht in einem abschließenden Zustand befindet, wird mit dem get-Aufruf gewartet, bis die Aufgabe fertig gestellt wurde. Diese Methode gibt bei dem Aufruf einer Aufgabe mit einem result_type von void keinen Wert zurück.

_ResultType get() const;

void get() const;

Rückgabewert

Das Ergebnis der Aufgabe.

Hinweise

Wenn die Aufgabe abgebrochen wird, löst ein Aufruf get eine task_canceled Ausnahme aus. Wenn die Aufgabe eine Ausnahme während der Ausführung feststellt oder an sie eine Ausnahme aus einer vorherigen Aufgabe weitergegeben wurde, löst ein Aufruf von get diese Ausnahme aus.

Wichtig

Rufen Sie in einer Universelle Windows-Plattform-App (UWP) keine Parallelität::task::wait oder get ( wait Aufrufe get) in Code auf, der im Benutzeroberflächenthread ausgeführt wird. Andernfalls löst die Laufzeit Parallelität::invalid_operation aus, da diese Methoden den aktuellen Thread blockieren und dazu führen können, dass die App nicht mehr reagiert. Sie können jedoch die get-Methode aufrufen, um das Ergebnis der vorangegangenen Aufgabe in einer aufgabenbasierten Fortsetzung zu erhalten, da das Ergebnis sofort verfügbar ist.

is_apartment_aware

Bestimmt, ob der Task eine IAsyncInfo-Schnittstelle der Windows Runtime entpackt oder von einem solchen Task abgeleitet wurde.

bool is_apartment_aware() const;

Rückgabewert

true wenn die Aufgabe eine IAsyncInfo Schnittstelle entpackt oder von einer solchen Aufgabe absteigend ist, false andernfalls.

task::is_done-Methode (Concurrency Runtime)

Bestimmt, ob die Aufgabe abgeschlossen wurde.

bool is_done() const;

Rückgabewert

"True", wenn die Aufgabe abgeschlossen wurde, andernfalls "false".

Hinweise

Die Funktion gibt "true" zurück, wenn die Aufgabe abgeschlossen oder abgebrochen wurde (mit oder ohne Benutzerausnahme).

operator!=

Bestimmt, ob zwei task-Objekte unterschiedliche interne Aufgaben darstellen.

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

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

Parameter

_Rhs
Der zu vergleichende Vorgang.

Rückgabewert

true wenn die Objekte auf unterschiedliche zugrunde liegende Vorgänge verweisen und false andernfalls.

operator =

Ersetzt den Inhalt eines task-Objekts durch einen anderen.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

Parameter

_Other
Das task-Quellobjekt.

Rückgabewert

Bemerkungen

Da sich task wie ein intelligenter Zeiger verhält, stellt dieses task-Objekt nach einer Kopierzuweisung die gleiche Aufgabe dar wie _Other.

operator==

Bestimmt, ob zwei task-Objekte die gleiche interne Aufgabe darstellen.

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

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

Parameter

_Rhs
Der zu vergleichende Vorgang.

Rückgabewert

true wenn die Objekte auf denselben zugrunde liegenden Vorgang verweisen, andernfalls false .

task::scheduler-Methode (Concurrency Runtime)

Gibt den Planer für diesen Task zurück.

scheduler_ptr scheduler() const;

Rückgabewert

Ein Zeiger auf den Planer.

task

Erstellt ein 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);

Parameter

T
Der Typ des Parameters, von dem die Aufgabe erstellt werden soll.

_Param
Der Parameter, von dem der Task erstellt werden soll. Dies kann eine Lambda-Funktion, ein Funktionsobjekt, ein task_completion_event<result_type> Objekt oder ein Windows::Foundation::IAsyncInfo sein, wenn Sie Aufgaben in Ihrer Windows-Runtime-App verwenden. Das Lambda- oder Funktionsobjekt sollte ein Typ sein, der dem Typ X entsprichtstd::function<X(void)>, wobei X eine Variable vom Typ result_typeoder task<result_type>ein Windows::Foundation::IAsyncInfo in Windows-Runtime-Apps sein kann.

_TaskOptions
Die Aufgabenoptionen enthalten Abbruchtoken, Planer usw.

_Other
Das task-Quellobjekt.

Hinweise

Der Standardkonstruktor für task ist nur vorhanden, damit Aufgaben in Containern verwendet werden können. Eine erstellte Standardaufgabe kann nicht verwendet werden, bis Sie ihr eine gültige Aufgabe zuweisen. Methoden wie get, wait oder then löst eine invalid_argument Ausnahme aus, wenn für einen standard konstruierten Vorgang aufgerufen wird.

Eine Aufgabe, die aus einem task_completion_event erstellt wird, wird abgeschlossen (und danach werden ihre Fortsetzungen geplant), wenn das Aufgabenabschlussereignis festgelegt ist.

Die Version des Konstruktors, die ein Abbruchtoken verwendet, erstellt eine Aufgabe, die mithilfe der cancellation_token_source, aus der das Token abgerufen wurde, abgebrochen werden kann. Die Aufgaben, die ohne ein Abbruchtoken erstellt werden, können nicht abgebrochen werden.

Die Aufgaben, die aus einer Windows::Foundation::IAsyncInfo-Schnittstelle oder einem Lambda-Ausdruck erstellt werden, der eine IAsyncInfo-Schnittstelle zurückgibt, erreichen den abgeschlossenen Zustand, wenn der enthaltene asynchrone Windows-Runtime-Vorgang oder die enthaltene Aktion abgeschlossen wurde. Ebenso werden aufgaben, die aus einer Lambda-Funktion erstellt wurden, die ihren task<result_type> Terminalstatus zurückgibt, wenn die innere Aufgabe den Terminalzustand erreicht, und nicht, wenn die Lambda-Funktion zurückgegeben wird.

task verhält sich wie ein intelligenter Zeiger und kann mehrmals als Wert übergeben werden. Ein Zugriff ist durch mehrere Threads ohne Sperren möglich.

Die Konstruktorüberladungen, die eine Windows::Foundation::IAsyncInfo-Schnittstelle verwenden, oder eine Lambda-Funktion, die eine solche Schnittstelle zurückgibt, sind nur für Windows-Runtime Apps verfügbar.

Weitere Informationen finden Sie unter Task Parallelism.

Erforderliche Vorgehensweise

Fügt diesem Task einen Fortsetzungstask hinzu.

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;

Parameter

_Funktion
Der Typ des Funktionsobjekts, das von dieser Aufgabe aufgerufen wird.

_Func
Die Fortsetzungsfunktion, die ausgeführt werden soll, wenn diese Aufgabe abgeschlossen ist. Diese Fortsetzungsfunktion muss als Eingabe die Variable result_type oder task<result_type> verwenden, wobei result_type der Ergebnistyp ist, den diese Aufgabe erzeugt.

_TaskOptions
Die Aufgabenoptionen umfassen das Abbruchtoken, den Planer und den Fortsetzungskontext. Standardmäßig werden die vorherigen drei Optionen von der Vorgängeraufgabe geerbt.

_CancellationToken
Das Abbruchtoken, das der Fortsetzungsaufgabe zugeordnet werden soll. Eine Fortsetzungsaufgabe, die ohne ein Abbruchtoken erstellt wird, erbt das Token von der Vorgängeraufgabe.

_ContinuationContext
Eine Variable, die angibt, wo die Fortsetzung ausgeführt werden soll. Diese Variable ist nur nützlich, wenn sie in einer UWP-App verwendet wird. Weitere Informationen finden Sie unter task_continuation_context

Rückgabewert

Die neu erstellte Fortsetzungsaufgabe. Der Ergebnistyp der zurückgegebenen Aufgabe wird von dem bestimmt, was _Func zurückgibt.

Hinweise

Die Überladungen, die then einen Lambda- oder Functor verwenden, der eine Windows::Foundation::IAsyncInfo-Schnittstelle zurückgibt, sind nur für Windows-Runtime Apps verfügbar.

Weitere Informationen zum Verwenden von Aufgabenfortsetzungen zum Verfassen asynchroner Arbeiten finden Sie unter Task Parallelism.

wait

Erwartet, dass dieser Task einen Terminalzustand erreicht. Es ist möglich, dass das wait-Element den Task inline ausführt, wenn alle Taskabhängigkeiten erfüllt sind und er nicht bereits zur Ausführung durch einen Hintergrundworker aufgehoben wurde.

task_status wait() const;

Rückgabewert

Ein task_status-Wert, der entweder completed oder canceled ist. Wenn die Aufgabe eine Ausnahme während der Ausführung feststellt oder an sie eine Ausnahme aus einer vorherigen Aufgabe weitergegeben wurde, löst wait diese Ausnahme aus.

Hinweise

Wichtig

Rufen wait Sie in einer Universelle Windows-Plattform-App (UWP) keinen Code auf, der im Benutzeroberflächenthread ausgeführt wird. Andernfalls löst die Laufzeit concurrency::invalid_operation aus, da diese Methode den aktuellen Thread blockiert und die App dadurch möglicherweise nicht mehr reagiert. Sie können jedoch die concurrency::task::get -Methode aufrufen, um das Ergebnis der Vorgängeraufgabe in einer aufgabenbasierten Fortsetzung zu erhalten.

Siehe auch

Concurrency-Namespace