Freigeben über


task_group-Klasse

Die task_group-Klasse stellt eine Auflistung der parallelen Arbeit dar, auf die gewartet oder die abgebrochen werden kann.

Syntax

class task_group;

Member

Öffentliche Konstruktoren

Name Beschreibung
task_group Überladen. Erstellt ein neues task_group-Objekt.
~task_group Destruktor Zerstört ein task_group -Objekt. Es wird erwartet, dass Sie die Methode oder run_and_wait die Methode wait für das Objekt vor dem Ausführen des Destruktors aufrufen, es sei denn, der Destruktor wird aufgrund einer Ausnahme als Ergebnis der Stapelaussetzung ausgeführt.

Öffentliche Methoden

Name Beschreibung
cancel Es wird versucht, die Unterstruktur der Arbeit abzubrechen, die in dieser Aufgabengruppe verwurzelt ist. Alle vorgänge, die für die Vorgangsgruppe geplant sind, werden nach Möglichkeit transitiv abgebrochen.
is_canceling Informiert den Anrufer darüber, ob sich die Aufgabengruppe derzeit mitten in einer Abbruchzeit befindet. Dies weist nicht unbedingt darauf hin, dass die cancel Methode für das task_group Objekt aufgerufen wurde (obwohl diese Methode sicherlich für die Rückgabe truequalifiziert). Es kann vorkommen, dass das task_group Objekt inline ausgeführt wird und eine Aufgabengruppe weiter oben in der Arbeitsstruktur abgebrochen wurde. In Fällen wie diesen, in denen die Laufzeit vor dem Ablauf des Abbruchs durch dieses task_group Objekt bestimmen kann, true wird ebenfalls zurückgegeben.
run Überladen. Plant einen Vorgang für das task_group Objekt. Wenn ein task_handle Objekt als Parameter runübergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle Objekts verantwortlich. Die Version der Methode, die einen Verweis auf ein Funktionsobjekt als Parameter verwendet, umfasst die Heap-Zuordnung innerhalb der Laufzeit, die möglicherweise weniger gut funktioniert als die Verwendung der Version, die einen Verweis auf ein task_handle Objekt verwendet. Die Version, die den Parameter _Placement verwendet, bewirkt, dass die Aufgabe auf die Ausführung an dem durch diesen Parameter angegebenen Speicherort voreingenommen wird.
run_and_wait Überladen. Plant, dass eine Aufgabe im Aufrufkontext inline ausgeführt wird, wobei das Objekt unterstützung task_group für die vollständige Abbruchunterstützung unterstützt. Die Funktion wartet dann, bis alle Arbeiten task_group am Objekt abgeschlossen oder abgebrochen wurden. Wenn ein task_handle Objekt als Parameter run_and_waitübergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle Objekts verantwortlich.
wait Wartet, bis alle Arbeiten am task_group Objekt abgeschlossen oder abgebrochen wurden.

Hinweise

Im Gegensatz zur stark eingeschränkten structured_task_group Klasse ist die task_group Klasse viel allgemeiner. Sie hat keine der von structured_task_group beschriebenen Einschränkungen. task_group Objekte können sicher über Threads hinweg verwendet und auf freiformfähige Weise verwendet werden. Der Nachteil des task_group Konstrukts besteht darin, dass es nicht so gut wie das structured_task_group Konstrukt für Vorgänge ausgeführt werden kann, die kleine Arbeitsmengen ausführen.

Weitere Informationen finden Sie unter Task Parallelism.

Vererbungshierarchie

task_group

Anforderungen

Kopfzeile: ppl.h

Namespace: Parallelität

cancel

Es wird versucht, die Unterstruktur der Arbeit abzubrechen, die in dieser Aufgabengruppe verwurzelt ist. Alle vorgänge, die für die Vorgangsgruppe geplant sind, werden nach Möglichkeit transitiv abgebrochen.

void cancel();

Hinweise

Weitere Informationen finden Sie unter "Stornierung".

is_canceling

Informiert den Anrufer darüber, ob sich die Aufgabengruppe derzeit mitten in einer Abbruchzeit befindet. Dies weist nicht unbedingt darauf hin, dass die cancel Methode für das task_group Objekt aufgerufen wurde (obwohl diese Methode sicherlich für die Rückgabe truequalifiziert). Es kann vorkommen, dass das task_group Objekt inline ausgeführt wird und eine Aufgabengruppe weiter oben in der Arbeitsstruktur abgebrochen wurde. In Fällen wie diesen, in denen die Laufzeit vor dem Ablauf des Abbruchs durch dieses task_group Objekt bestimmen kann, true wird ebenfalls zurückgegeben.

bool is_canceling();

Rückgabewert

Ein Hinweis darauf, ob sich das task_group Objekt mitten in einer Stornierung befindet (oder kurz darauf garantiert ist).

Hinweise

Weitere Informationen finden Sie unter "Stornierung".

run

Plant einen Vorgang für das task_group Objekt. Wenn ein task_handle Objekt als Parameter runübergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle Objekts verantwortlich. Die Version der Methode, die einen Verweis auf ein Funktionsobjekt als Parameter verwendet, umfasst die Heap-Zuordnung innerhalb der Laufzeit, die möglicherweise weniger gut funktioniert als die Verwendung der Version, die einen Verweis auf ein task_handle Objekt verwendet. Die Version, die den Parameter _Placement verwendet, bewirkt, dass die Aufgabe auf die Ausführung an dem durch diesen Parameter angegebenen Speicherort voreingenommen wird.

template<
   typename _Function
>
void run(
   const _Function& _Func
);

template<
   typename _Function
>
void run(
   const _Function& _Func,
   location& _Placement
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle,
   location& _Placement
);

Parameter

_Funktion
Der Typ des Funktionsobjekts, das aufgerufen wird, um den Textkörper des Aufgabenhandle auszuführen.

_Func
Eine Funktion, die aufgerufen wird, um den Textkörper der Aufgabe aufzurufen. Dies kann ein Lambda-Ausdruck oder ein anderes Objekt sein, das eine Version des Funktionsaufrufoperators mit der Signatur void operator()()unterstützt.

_Platzierung
Ein Verweis auf den Speicherort, an dem die durch den _Func Parameter dargestellte Aufgabe ausgeführt werden soll.

_Task_handle
Ein Handle für die geplante Arbeit. Beachten Sie, dass der Aufrufer für die Lebensdauer dieses Objekts verantwortlich ist. Die Laufzeit erwartet weiterhin, dass sie aktiv ist, bis die Methode oder run_and_wait die wait Methode für dieses task_group Objekt aufgerufen wurde.

Hinweise

Die Laufzeit plant die bereitgestellte Arbeitsfunktion, die zu einem späteren Zeitpunkt ausgeführt werden soll, was nach dem Zurückgeben der aufrufenden Funktion erfolgen kann. Diese Methode verwendet ein task_handle-Objekt , um eine Kopie der bereitgestellten Arbeitsfunktion zu enthalten. Daher werden alle Zustandsänderungen, die in einem Funktionsobjekt auftreten, das Sie an diese Methode übergeben, nicht in Ihrer Kopie dieses Funktionsobjekts angezeigt. Stellen Sie außerdem sicher, dass die Lebensdauer aller Objekte, die Sie per Zeiger oder verweis auf die Arbeitsfunktion übergeben, gültig bleiben, bis die Arbeitsfunktion zurückgegeben wird.

Wenn die task_group Destruktierung als Ergebnis der Abkopplung von Stapeln von einer Ausnahme ausfällt, müssen Sie nicht garantieren, dass ein Aufruf an die wait Methode oder run_and_wait die Methode erfolgt ist. In diesem Fall wird der Destruktor ordnungsgemäß abbrechen und warten, bis die Aufgabe, die durch den _Task_handle Parameter dargestellt wird, abgeschlossen ist.

Die Methode löst eine invalid_multiple_scheduling Ausnahme aus, wenn der vom _Task_handle Parameter angegebene Vorgangshandle bereits über die run Methode auf ein Aufgabengruppenobjekt geplant wurde und es keinen dazwischen liegenden Aufruf der wait Aufgabe oder run_and_wait Methode für diese Aufgabengruppe gab.

run_and_wait

Plant, dass eine Aufgabe im Aufrufkontext inline ausgeführt wird, wobei das Objekt unterstützung task_group für die vollständige Abbruchunterstützung unterstützt. Die Funktion wartet dann, bis alle Arbeiten task_group am Objekt abgeschlossen oder abgebrochen wurden. Wenn ein task_handle Objekt als Parameter run_and_waitübergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle Objekts verantwortlich.

template<
   class _Function
>
task_group_status run_and_wait(
   task_handle<_Function>& _Task_handle
);

template<
   class _Function
>
task_group_status run_and_wait(
   const _Function& _Func
);

Parameter

_Funktion
Der Typ des Funktionsobjekts, das aufgerufen wird, um den Textkörper der Aufgabe auszuführen.

_Task_handle
Ein Handle für die Aufgabe, die im aufrufenden Kontext inline ausgeführt wird. Beachten Sie, dass der Aufrufer für die Lebensdauer dieses Objekts verantwortlich ist. Die Laufzeit erwartet weiterhin, dass sie bis zum Abschluss der Ausführung der run_and_wait Methode live ist.

_Func
Eine Funktion, die aufgerufen wird, um den Textkörper der Arbeit aufzurufen. Dies kann ein Lambda-Ausdruck oder ein anderes Objekt sein, das eine Version des Funktionsaufrufoperators mit der Signatur void operator()()unterstützt.

Rückgabewert

Ein Hinweis darauf, ob die Wartezeit erfüllt oder die Aufgabengruppe abgebrochen wurde, aufgrund eines expliziten Abbruchvorgangs oder einer Ausnahme, die von einem seiner Aufgaben ausgelöst wird. Weitere Informationen finden Sie unter task_group_status.

Hinweise

Beachten Sie, dass eine oder mehrere der für dieses task_group Objekt geplanten Aufgaben inline im aufrufenden Kontext ausgeführt werden können.

Wenn mindestens eine der für dieses task_group Objekt geplanten Aufgaben eine Ausnahme auslöst, wählt die Laufzeit eine solche Ausnahme der Auswahl aus und verteilt sie aus dem Aufruf der run_and_wait Methode.

Wenn die run_and_wait Methode für ein task_group Objekt zurückgegeben wird, setzt die Laufzeit das Objekt auf einen sauberen Zustand zurück, in dem es wiederverwendet werden kann. Dies schließt den Fall ein, in dem das task_group Objekt abgebrochen wurde.

Im nicht außergewöhnlichen Ausführungspfad verfügen Sie über ein Mandat, entweder diese Methode oder die wait Methode vor dem Destruktor der task_group Ausgeführten aufzurufen.

task_group

Erstellt ein neues task_group-Objekt.

task_group();

task_group(
   cancellation_token _CancellationToken
);

Parameter

_CancellationToken
Ein Abbruchtoken, das dieser Aufgabengruppe zugeordnet werden soll. Die Aufgabengruppe wird abgebrochen, wenn das Token abgebrochen wird.

Hinweise

Der Konstruktor, der ein Abbruchtoken akzeptiert, erstellt ein task_group Abbruchtoken, das abgebrochen wird, wenn die dem Token zugeordnete Quelle abgebrochen wird. Wenn Sie ein explizites Abbruchtoken bereitstellen, wird diese Aufgabengruppe auch davon isoliert, an einem impliziten Abbruch von einer übergeordneten Gruppe mit einem anderen Token oder keinem Token teilzunehmen.

~task_group

Zerstört ein task_group -Objekt. Es wird erwartet, dass Sie die Methode oder run_and_wait die Methode wait für das Objekt vor dem Ausführen des Destruktors aufrufen, es sei denn, der Destruktor wird aufgrund einer Ausnahme als Ergebnis der Stapelaussetzung ausgeführt.

~task_group();

Hinweise

Wenn der Destruktor als Ergebnis der normalen Ausführung ausgeführt wird (z. B. nicht stapeln sie aufgrund einer Ausnahme), und weder die methoden noch die wait Methoden aufgerufen wurden, kann der Destruktor eine missing_wait Ausnahme run_and_wait auslösen.

wait

Wartet, bis alle Arbeiten am task_group Objekt abgeschlossen oder abgebrochen wurden.

task_group_status wait();

Rückgabewert

Ein Hinweis darauf, ob die Wartezeit erfüllt oder die Aufgabengruppe abgebrochen wurde, aufgrund eines expliziten Abbruchvorgangs oder einer Ausnahme, die von einem seiner Aufgaben ausgelöst wird. Weitere Informationen finden Sie unter task_group_status.

Hinweise

Beachten Sie, dass eine oder mehrere der für dieses task_group Objekt geplanten Aufgaben inline im aufrufenden Kontext ausgeführt werden können.

Wenn mindestens eine der für dieses task_group Objekt geplanten Aufgaben eine Ausnahme auslöst, wählt die Laufzeit eine solche Ausnahme der Auswahl aus und verteilt sie aus dem Aufruf der wait Methode.

Das Aufrufen wait eines task_group Objekts setzt es auf einen sauberen Zustand zurück, in dem es wiederverwendet werden kann. Dies schließt den Fall ein, in dem das task_group Objekt abgebrochen wurde.

Im nicht außergewöhnlichen Ausführungspfad verfügen Sie über ein Mandat, entweder diese Methode oder die run_and_wait Methode vor dem Destruktor der task_group Ausgeführten aufzurufen.

Siehe auch

Concurrency-Namespace
structured_task_group-Klasse
task_handle-Klasse