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 get
auf) 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 get
oder wait
then
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.