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 erzeugt bei erfolgreichem Abschluss ein Ergebnis vom Typ _ResultType. Tasks des Typs task<void> führen zu keinem Ergebnis. Eine Aufgabe kann abgewartet und unabhängig von anderen Aufgaben abgebrochen werden. Sie kann auch mit anderen Aufgaben mit Fortsetzungsmustern(then) und Join(when_all) und Auswahlmusternwhen_any 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.

Mitglieder

Ö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
Abrufen Ü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 die Aufgabe eine IAsyncInfo-Schnittstelle der Windows Runtime entpackt oder von einer solchen Aufgabe abgeleitet ist.
is_done Bestimmt, ob die Aufgabe abgeschlossen wurde.
Scheduler Gibt den Scheduler für diese Aufgabe zurück.
dann Überladen. Fügt dieser Aufgabe eine Fortsetzungsaufgabe hinzu.
Warte Wartet darauf, dass diese Aufgabe einen Endzustand erreicht. Es ist möglich, dass das wait-Element den Task direkt ausführt, wenn alle Abhängigkeiten des Tasks erfüllt sind und er nicht bereits zur Ausführung durch einen Hintergrundworker übernommen 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

erhalten

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 auf eine Ausnahme trifft oder ihr eine Ausnahme von einer vorhergehenden Aufgabe übertragen wurde, dann wirft ein Aufruf von get diese Ausnahme.

Wichtig

Rufen Sie in einer UWP-App (Universelle Windows-Plattform) keine concurrency::task::wait oder get (wait Aufrufe get) im Code auf, der im Benutzeroberflächenthread ausgeführt wird. Andernfalls löst die Runtime concurrency::invalid_operation aus, da diese Methoden den aktuellen Thread blockieren und die App möglicherweise 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 die Aufgabe eine IAsyncInfo-Schnittstelle der Windows Runtime entpackt oder von einer solchen Aufgabe abgeleitet ist.

bool is_apartment_aware() const;

Rückgabewert

true wenn die Aufgabe eine IAsyncInfo Schnittstelle entpackt oder von einer solchen Aufgabe abgeleitet 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
Die Aufgabe zum Vergleichen.

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

_Andere
Das task-Quellobjekt.

Rückgabewert

Hinweise

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 Aufgabe zum Vergleichen.

Rückgabewert

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

task::scheduler-Methode (Concurrency Runtime)

Gibt den Scheduler für diese Aufgabe zurück.

scheduler_ptr scheduler() const;

Rückgabewert

Ein Zeiger auf den Scheduler.

Aufgabe

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 einem Typ 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 Task-Optionen umfassen Abbruch-Token, Scheduler usw.

_Andere
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ösen eine invalid_argument Ausnahme aus, wenn sie bei einem standardmäßig konstruierten Vorgang aufgerufen werden.

Eine Aufgabe, die aus einem task_completion_event erstellt wird, wird abgeschlossen, und ihre Fortsetzungen werden geplant, sobald das Abschlussereignis der Aufgabe 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.

Aufgaben, die von einer Windows::Foundation::IAsyncInfo-Schnittstelle oder einem Lambda-Ausdruck erstellt werden, der eine IAsyncInfo-Schnittstelle zurückgibt, erreichen ihren abgeschlossenen Zustand, sobald die asynchrone Windows-Runtime-Operation oder die Aktion, die sie umschließt, abgeschlossen ist. 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 sicher 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.

dann

Fügt dieser Aufgabe eine Fortsetzungsaufgabe 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 von then, die einen Lambda- oder Funktor 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.

warten

Wartet darauf, dass diese Aufgabe einen Endzustand erreicht. Es ist möglich, dass das wait-Element den Task direkt ausführt, wenn alle Abhängigkeiten des Tasks erfüllt sind und er nicht bereits zur Ausführung durch einen Hintergrundworker übernommen 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

In einer Universal Windows Platform-App (UWP) rufen Sie wait nicht in Code auf, der auf dem Benutzeroberflächen-Thread 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