Partage via


IAsyncOperation<TResult> Interface

Définition

Représente une opération asynchrone, qui retourne un résultat à la fin. Il s’agit du type de retour pour de nombreuses méthodes asynchrones Windows Runtime (WinRT) qui ont des résultats, mais qui ne signalent pas la progression.

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

Paramètres de type

TResult
Dérivé
Attributs
Implémente

Configuration requise pour Windows

Famille d’appareils
Windows 10 (introduit dans 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (introduit dans v1.0)

Remarques

IAsyncOperation<TResult> est le type de retour pour de nombreuses méthodes asynchrones WinRT qui ont un résultat à la fin, mais ne signalent pas la progression. Cela constitue plus de 650 API WinRT différentes. Les API qui signalent la progression et ont un résultat utilisent une autre interface, IAsyncOperationWithProgress<TResult,TProgress>.

Lorsque vous utilisez des méthodes qui retournent IAsyncOperation<TResult> (avec une contrainte TResult spécifique) dans votre code d’application, vous n’accédez généralement pas directement à la valeur de retour IAsyncOperation. C’est parce que vous utilisez presque toujours la syntaxe awaitable propre au langage. Dans ce cas, la valeur de retour apparente de la méthode est le type fourni en tant que paramètre TResult. Pour plus d’informations, consultez de programmation asynchrone, ou l’un des guides spécifiques au langage pour la programmation asynchrone WinRT (Appeler des API asynchrones en C# ou Visual Basic, C++, JavaScript).

Il n’est pas courant d’utiliser IAsyncOperation<TResult> directement même si vous n’utilisez pas de syntaxe awaitable spécifique au langage. Chacun des langages a des points d’extension généralement plus faciles à utiliser que l’interface WinRT. JavaScript a WinJS.Promiseet la syntaxe then/done. .NET a la méthode d’extension AsTask et une fois que le IAsyncOperation<TResult> est converti en Tâche<TResult>, il est plus facile d’obtenir le résultat, l’annulation, la notification d’obtention à l’achèvement, et ainsi de suite. Pour C++/CX, vous pouvez encapsuler les appels à l’aide du runtime d’accès concurrentiel (et utiliser create_task). En d’autres termes, IAsyncOperation<TResult> peut être considéré comme une infrastructure au niveau du runtime, que chacun des langages utilise comme infrastructure pour prendre en charge la syntaxe attendue ou les modèles de programmation asynchrones de leur propre manière.

Au lieu d’utiliser IAsyncOperation<TResult>, certaines méthodes asynchrones WinRT utilisent des types d’opérations personnalisés. Par exemple, DataReaderLoadOperation est un type WinRT qui implémente IAsyncOperation à l’aide de uint comme type de résultat. Le type DataReaderLoadOperation est ensuite utilisé comme type d’opération/résultat personnalisé pour la méthode DataReader.LoadAsync.

Si vous avez une méthode qui retourne un Task<T> .NET et que vous avez besoin d’un IAsyncOperation<TResult> pour passer à une API WinRT, vous pouvez utiliser la méthode d’extension AsAsyncOperation.

Fonctions d’extension C++/WinRT

Note

Les fonctions d’extension existent sur les types de projection C++/WinRT pour certaines API WinRT. Par exemple, winrt::Windows::Foundation::IAsyncAction est le type de projection C++/WinRT pour IAsyncAction. Les fonctions d’extension ne font pas partie de la surface de l’interface binaire d’application (ABI) des types WinRT réels. Elles ne sont donc pas répertoriées en tant que membres des API WinRT. Mais vous pouvez les appeler à partir de n’importe quel projet C++/WinRT. Consultez fonctions C++/WinRT qui étendent les API Windows Runtime.

TResult get() const;

Attend de façon synchrone que l’opération se termine et retourne la valeur terminée. Lève une exception correspondante si l’opération est annulée ou entre un état d’erreur. Vous ne devez pas l’appeler à partir d’un appartement à thread unique. Pour plus d’informations et des exemples de code montrant comment appeler get, consultez Écrire uncoroutine .

AsyncStatus wait_for(TimeSpan const& timeout) const;

Attend de façon synchrone que l’opération se termine ou pour le délai d’expiration spécifié. Retourne l’état du IAsyncOperation, ou AsyncStatus ::Started si le délai d’attente s’est écoulé. Si l’action n’a pas expiré, appelez GetResults pour obtenir les résultats de l’opération. Pour plus d’informations et des exemples de code montrant comment appeler wait_for, consultez délais d’attente asynchrones facilitent.

Héritage de l’interface

IAsyncOperation<TResult> hérite IAsyncInfo . Les types qui implémentent IAsyncOperation<TResult> implémentent également les membres d’interface de IAsyncInfo :

  • méthode Cancel
  • méthode Close
  • propriété ErrorCode
  • propriété Id
  • propriété Status

Remarques sur les implémenteurs

Comme pour appeler les méthodes existantes, il existe des façons spécifiques au langage de définir des méthodes asynchrones qui n’utilisent pas IAsyncOperation<TResult> directement. Si vous écrivez du code à l’aide de .NET, votre méthode peut retourner un Task<TResult>. Pour C++/CX, vous pouvez utiliser le runtime d’accès concurrentiel . Toutefois, si vous définissez un composant , vous pouvez utiliser Task/task en interne, mais vous devez retourner l’une des interfaces WinRT pour vos méthodes publiques. Les types de prise en charge asynchrone spécifiques au langage (et de nombreux autres types spécifiques au langage que vous pouvez utiliser conventionnellement dans le code) ne peuvent pas être utilisés pour la surface publique d’un composant WinRT.

Propriétés

Completed

Obtient ou définit le délégué appelé une fois l’opération terminée.

ErrorCode

Obtient une chaîne qui décrit une condition d’erreur de l’opération asynchrone.

(Hérité de IAsyncInfo)
Id

Obtient le handle de l’opération asynchrone.

(Hérité de IAsyncInfo)
Status

Obtient une valeur qui indique l’état de l’opération asynchrone.

(Hérité de IAsyncInfo)

Méthodes

Cancel()

Annule l’opération asynchrone.

(Hérité de IAsyncInfo)
Close()

Ferme l’opération asynchrone.

(Hérité de IAsyncInfo)
GetResults()

Retourne les résultats de l’opération.

S’applique à

Voir aussi