IAsyncOperation<TResult> Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt einen asynchronen Vorgang dar, der nach Abschluss ein Ergebnis zurückgibt. Dies ist der Rückgabetyp für viele asynchrone Windows-Runtime-Methoden (WinRT), die Ergebnisse aufweisen, aber keinen Fortschritt melden.
public interface class IAsyncOperation : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
template <typename TResult>
struct IAsyncOperation : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
public interface IAsyncOperation<TResult> : IAsyncInfo
Public Interface IAsyncOperation(Of TResult)
Implements IAsyncInfo
Typparameter
- TResult
- Abgeleitet
- Attribute
- Implementiert
Windows-Anforderungen
Gerätefamilie |
Windows 10 (eingeführt in 10.0.10240.0)
|
API contract |
Windows.Foundation.FoundationContract (eingeführt in v1.0)
|
Hinweise
IAsyncOperation<TResult>
ist der Rückgabetyp für viele asynchrone WinRT-Methoden, die nach Abschluss ein Ergebnis haben, aber keinen Fortschritt melden. Dies stellt mehr als 650 verschiedene WinRT-APIs dar. APIs, die den Fortschritt melden und ein Ergebnis haben, verwenden eine andere Schnittstelle, IAsyncOperationWithProgress<TResult,TProgress>.
Wenn Sie Methoden verwenden, die IAsyncOperation<TResult>
(mit einer TResult
spezifische Einschränkung) in Ihrem App-Code zurückgeben, greifen Sie in der Regel nicht direkt auf den IAsyncOperation
Rückgabewert zu. Das liegt daran, dass Sie fast immer die sprachspezifische, wartende Syntax verwenden. In diesem Fall ist der offensichtliche Rückgabewert der Methode der Typ, der als TResult
-Parameter bereitgestellt wird. Weitere Informationen finden Sie unter Asynchrone Programmierungoder eine der sprachspezifischen Leitfäden für die asynchrone WinRT-Programmierung (Aufrufen asynchroner APIs in C# oder Visual Basic, C++-, JavaScript-).
Es ist nicht üblich, IAsyncOperation<TResult>
direkt zu verwenden, auch wenn Sie keine sprachspezifische, wartende Syntax verwenden. Jede Der Sprachen weist Erweiterungspunkte auf, die im Allgemeinen einfacher zu verwenden sind als die WinRT-Schnittstelle. JavaScript verfügt über WinJS.Promiseund die then
/done
Syntax. .NET verfügt über die AsTask Erweiterungsmethode, und sobald die IAsyncOperation<TResult>
in eine Aufgabe<TResult>konvertiert wird, ist es einfacher, das Ergebnis abzurufen, abzubrechen, Benachrichtigungen zum Abschluss zu erhalten usw. Für C++/CX können Sie die Aufrufe mithilfe der Concurrency Runtime (und create_taskverwenden) umschließen. Mit anderen Worten, IAsyncOperation<TResult>
kann als Infrastruktur auf Laufzeitebene betrachtet werden, die jede der Sprachen als Framework verwendet, um die erwartbare Syntax oder asynchrone Programmiermodelle auf eigene Weise zu unterstützen.
Statt IAsyncOperation<TResult>
zu verwenden, verwenden einige asynchrone WinRT-Methoden benutzerdefinierte Vorgangstypen. Beispielsweise ist DataReaderLoadOperation- ein WinRT-Typ, der IAsyncOperation
mithilfe von uint
als Ergebnistyp implementiert. Der DataReaderLoadOperation Typs wird dann als benutzerdefinierter Vorgangs-/Ergebnistyp für die DataReader.LoadAsync--Methode verwendet.
Wenn Sie über eine Methode verfügen, die eine .NET-Task<T>
zurückgibt und eine IAsyncOperation<TResult>
zum Übergeben an eine WinRT-API benötigt, können Sie die AsAsyncOperation Erweiterungsmethode verwenden.
C++/WinRT-Erweiterungsfunktionen
Anmerkung
Erweiterungsfunktionen sind für die C++/WinRT-Projektionstypen für bestimmte WinRT-APIs vorhanden. Beispielsweise ist winrt::Windows::Foundation::IAsyncAction
der C++/WinRT-Projektionstyp für IAsyncAction. Die Erweiterungsfunktionen sind nicht Teil der ABI-Oberfläche (Application Binary Interface) der tatsächlichen WinRT-Typen, daher werden sie nicht als Member der WinRT-APIs aufgeführt. Sie können sie jedoch innerhalb eines beliebigen C++/WinRT-Projekts aufrufen. Siehe C++/WinRT-Funktionen, die Windows-Runtime-APIserweitern.
TResult get() const;
Wartet synchron, bis der Vorgang abgeschlossen ist, und gibt den abgeschlossenen Wert zurück. Löst eine entsprechende Ausnahme aus, wenn der Vorgang abgebrochen wird, oder gibt einen Fehlerstatus ein. Sie dürfen es nicht aus einer Singlethread-Wohnung aufrufen. Weitere Informationen und Codebeispiele zum Aufrufen von get
finden Sie unter Schreiben einer Coroutine-.
AsyncStatus wait_for(TimeSpan const& timeout) const;
Wartet synchron auf den Abschluss des Vorgangs oder auf das angegebene Timeout. Gibt den Status des IAsyncOperation
oder AsyncStatus::Started zurück, wenn das Timeout abgelaufen ist. Wenn die Aktion kein Timeout ausgeführt hat, rufen Sie GetResults- auf, um die Ergebnisse des Vorgangs abzurufen. Weitere Informationen und Codebeispiele, die zeigen, wie wait_for
aufgerufen werden, finden Sie unter asynchronen Timeouts, dieleicht gemacht wurden.
Schnittstellenvererbung
IAsyncOperation<TResult>
erbt IAsyncInfo-. Typen, die IAsyncOperation<TResult>
implementieren, implementieren auch die Schnittstellenmmber von IAsyncInfo:
- Cancel-Methode
- Close-Methode
- ErrorCode--Eigenschaft
- Id-Eigenschaft
- Status--Eigenschaft
Hinweise zu Implementierungen
Wie beim Aufrufen der vorhandenen Methoden gibt es sprachspezifische Methoden zum Definieren asynchroner Methoden, die nicht direkt IAsyncOperation<TResult>
verwenden. Wenn Sie Code mit .NET schreiben, kann die Methode ein Task<TResult->zurückgeben. Für C++/CX können Sie die Concurrency Runtimeverwenden. Wenn Sie jedoch eine Komponentedefinieren, können Sie Task
/task
intern verwenden, aber Sie müssen eine der WinRT-Schnittstellen für Ihre öffentlichen Methoden zurückgeben. Die sprachspezifischen asynchronen Unterstützungstypen (und viele andere sprachspezifische Typen, die Sie normalerweise im Code verwenden) können nicht für den öffentlichen Oberflächenbereich einer WinRT-Komponente verwendet werden.
Eigenschaften
Completed |
Dient zum Abrufen oder Festlegen des Delegaten, der aufgerufen wird, wenn der Vorgang abgeschlossen ist. |
ErrorCode |
Ruft eine Zeichenfolge ab, die eine Fehlerbedingung des asynchronen Vorgangs beschreibt. (Geerbt von IAsyncInfo) |
Id |
Ruft das Handle des asynchronen Vorgangs ab. (Geerbt von IAsyncInfo) |
Status |
Ruft einen Wert ab, der den Status des asynchronen Vorgangs angibt. (Geerbt von IAsyncInfo) |
Methoden
Cancel() |
Bricht den asynchronen Vorgang ab. (Geerbt von IAsyncInfo) |
Close() |
Schließt den asynchronen Vorgang. (Geerbt von IAsyncInfo) |
GetResults() |
Gibt die Ergebnisse des Vorgangs zurück. |