task-Klasse (Concurrency Runtime)

Die Parallel Patterns Library (PPL) task-Klasse. Ein task -Objekt stellt Aufgaben dar, die asynchron und gleichzeitig mit anderen Aufgaben und parallelen Aufgaben ausgeführt werden können, die von parallelen Algorithmen im Concurrency Runtime erzeugt 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 zusammengesetzt werden, indem fortsetzungs( then) und join( when_all) und choice( when_any) Muster verwendet werden. Wenn ein Aufgabenobjekt einer neuen Variablen zugewiesen wird, entspricht das Verhalten dem von std::shared_ptr. Anders ausgedrückt: Beide Objekte stellen die gleiche zugrunde liegende Aufgabe dar.

Syntax

template <>
class task<void>;

template<typename _ResultType>
class task;

Parameter

_ResultType
Der Typ des Ergebnisses, das der Task 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.
Scheduler Gibt den Planer für diesen Task zurück.
Dann Überladen. Fügt diesem Task einen Fortsetzungstask hinzu.
Warte 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.

Bemerkungen

Weitere Informationen finden Sie unter Aufgabenparallelität.

Vererbungshierarchie

task

Anforderungen

Header: 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.

Bemerkungen

Wenn die Aufgabe abgebrochen wird, löst ein Aufruf von 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) nicht concurrency::task::wait oder get ( wait ruft getauf) in Code auf, der im Benutzeroberflächenthread ausgeführt wird. Andernfalls löst die Laufzeit concurrency::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 abstammt, 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".

Bemerkungen

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
Die zu vergleichende Aufgabe.

Rückgabewert

true , wenn die Objekte auf verschiedene zugrunde liegende Aufgaben 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
Die zu vergleichende Aufgabe.

Rückgabewert

true , wenn die Objekte auf die gleiche zugrunde liegende Aufgabe verweisen, und false andernfalls .

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 ein Lambda, 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 entsprichtstd::function<X(void)>, wobei X eine Variable vom Typ result_type, task<result_type>oder ein Windows::Foundation::IAsyncInfo in Windows-Runtime-Apps sein kann.

_TaskOptions
Die Aufgabenoptionen enthalten Abbruchtoken, Planer usw.

_Other
Das task-Quellobjekt.

Bemerkungen

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 getoder waitthen löst eine invalid_argument Ausnahme aus, wenn sie für eine standardmäßig erstellte Aufgabe 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. Auf ähnliche Weise erreichen Aufgaben, die aus einem Lambda erstellt wurden, der einen task<result_type> zurückgibt, ihren Endzustand, wenn der innere Task seinen Endzustand erreicht, und nicht, wenn der Lambda-Ausdruck 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 oder ein Lambda verwenden, das eine solche Schnittstelle zurückgibt, sind nur für Windows-Runtime-Apps verfügbar.

Weitere Informationen finden Sie unter Aufgabenparallelität.

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

_Function
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.

Bemerkungen

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

Weitere Informationen zur Verwendung von Aufgabenfortsetzungen zum Erstellen asynchroner Arbeit finden Sie unter Aufgabenparallelität.

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.

Bemerkungen

Wichtig

Rufen wait Sie in einer Universelle Windows-Plattform-App (UWP) nicht in 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