create_async-Funktion

Erstellt ein asynchrones Konstrukt der Windows Runtime auf einem vom Benutzer angegebenes Lambda oder Funktionsobjekt. Der Rückgabetyp von create_async ist entweder IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ oder IAsyncOperationWithProgress<TResult, TProgress>^ auf Grundlage der Signatur des Lambda-Ausdrucks, der an die Methode übergeben wurde.

template<
   typename _Function
>
__declspec(
   noinline
) auto create_async(const _Function& _Func) -> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));

Parameter

  • _Function

  • _Func
    Der Lambda-Ausdruck oder das Funktionsobjekt, aus dem ein asynchrones Windows-Runtime-Konstrukt erstellt werden soll.

Rückgabewert

Ein asynchrones Konstrukt dargestellt durch IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ oder IAsyncOperationWithProgress<TResult, TProgress>^. Die Schnittstelle, die zurückgegeben wird, hängt von der Signatur des Lambda-Ausdrucks ab, der an die Funktion übergeben wird.

Hinweise

Der Rückgabetyp des Lambda-Ausdrucks bestimmt, ob das Konstrukt eine Aktion oder ein Vorgang ist.

Lambda-Ausdrücke, die "void" zurückgeben, führen zur Erstellung von Aktionen. Lambda-Ausdrücke, die ein Ergebnis vom Typ TResult zurückgeben, führen zur Erstellung von TResult-Vorgängen.

Der Lambda-Ausdruck kann auch task<TResult> zurückgeben, was die asynchronen Abläufe kapselt, oder die Fortsetzung einer Kette von Aufgaben ist, die die asynchronen Abläufe darstellen. In diesem Fall wird der Lambda-Ausdruck selbst inline ausgeführt, da die Aufgaben asynchron ausgeführt werden, und der Rückgabetyp des Lambda-Ausdrucks wird entpackt, um das von create_async zurückgegebene asynchrone Konstrukt zu erstellen. Dies impliziert, dass ein Lambda-Ausdruck, der "task<void>" zurückgibt, die Erstellung von Aktionen verursacht, und ein Lambda-Ausdruck, der "task<TResult>" zurückgibt, die Erstellung von TResult-Vorgängen bewirkt.

Der Lambda-Ausdruck akzeptiert null, ein oder zwei Argumente. Die gültigen Argumente sind progress_reporter<TProgress> und cancellation_token in dieser Reihenfolge, wenn beide verwendet werden. Ein Lambda-Ausdruck ohne Argumente bewirkt die Erstellung eines asynchronen Konstrukts ohne die Möglichkeit der Statusberichterstellung. Ein Lambda-Ausdruck, der "progress_reporter<TProgress>" verwendet, bewirkt, dass create_async ein asynchrones Konstrukt zurückgibt, das den Status des Typs "TProgress" jedes Mal meldet, wenn die report-Methode des Objekts "progress_reporter" aufgerufen wird. Ein Lambda-Ausdruck, der ein "cancellation_token" verwendet, kann dieses Token verwenden, um auf einen Abbruch zu prüfen, oder es an Aufgaben übergeben, die er erstellt, sodass ein Abbruch des asynchronen Konstrukts den Abbruch dieser Aufgaben verursacht.

Wenn der Text des Lambda-Ausdrucks oder Funktionsobjekts ein Ergebnis (und nicht "task<TResult>") zurückgibt, wird der Lambda-Ausdruck asynchron im Prozess-MTA im Kontext einer Aufgabe ausgeführt, die die Laufzeit implizit für diese erstellt. Die IAsyncInfo::Cancel-Methode verursacht den Abbruch der impliziten Aufgabe.

Wenn der Text des Lambda-Ausdrucks eine Aufgabe zurückgibt, wird der Lambda-Ausdruck inline ausgeführt. Durch Deklarieren des Lambda-Ausdrucks zur Verwendung eines Arguments des Typs cancellation_token können Sie den Abbruch aller Aufgaben auslösen, die Sie innerhalb des Lambda-Ausdrucks erstellen, indem Sie dieses Token bei ihrer Erstellung übergeben. Sie können auch die register_callback-Methode im Token verwenden, um die Laufzeit zu veranlassen, einen Rückruf aufzurufen, wenn Sie IAsyncInfo::Cancel für den asynchronen Vorgang oder die verursachte Aktion aufrufen.

Diese Funktion ist nur für Windows Store-Apps verfügbar.

Anforderungen

Header: ppltasks.h

Namespace: Parallelität

Siehe auch

Referenz

concurrency-Namespace

task-Klasse

progress_reporter-Klasse

Weitere Ressourcen

cancelation_token Class