IAsyncOperation<TResult> Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa una operación asincrónica, que devuelve un resultado tras la finalización. Este es el tipo de valor devuelto para muchos métodos asincrónicos de Windows Runtime (WinRT) que tienen resultados, pero no notifican el progreso.
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
Parámetros de tipo
- TResult
- Derivado
- Atributos
- Implementaciones
Requisitos de Windows
Familia de dispositivos |
Windows 10 (se introdujo en la versión 10.0.10240.0)
|
API contract |
Windows.Foundation.FoundationContract (se introdujo en la versión v1.0)
|
Comentarios
IAsyncOperation<TResult>
es el tipo de valor devuelto para muchos métodos asincrónicos de WinRT que tienen un resultado tras la finalización, pero no notifican el progreso. Esto constituye más de 650 API de WinRT diferentes. Las API que notifican el progreso y tienen un resultado usan otra interfaz, IAsyncOperationWithProgress<TResult,TProgress>.
Cuando usas métodos que devuelven IAsyncOperation<TResult>
(con una restricción específica TResult
) en el código de la aplicación, normalmente no accedes al IAsyncOperation
valor devuelto directamente. Esto se debe a que casi siempre usa la sintaxis awaitable específica del lenguaje. En este caso, el valor devuelto aparente del método es el tipo proporcionado como parámetro TResult
. Para obtener más información, consulta programación asincrónicao una de las guías específicas del lenguaje para la programación asincrónica de WinRT (Llamar a API asincrónicas en C# o Visual Basic, de C++ JavaScript).
No es habitual usar IAsyncOperation<TResult>
directamente incluso si no se usa una sintaxis await específica del lenguaje. Cada uno de los idiomas tiene puntos de extensión que generalmente son más fáciles de usar que la interfaz winRT. JavaScript tiene WinJS.Promisey la sintaxis then
/done
. .NET tiene el método de extensión de AsTask, y una vez que el IAsyncOperation<TResult>
se convierte en una tarea de <TResult>, es más fácil obtener el resultado, cancelar, obtener notificaciones al finalizar, etc. Para C++/CX, puede encapsular las llamadas mediante el de tiempo de ejecución de simultaneidad de IAsyncOperation<TResult>
se puede considerar infraestructura de nivel de tiempo de ejecución, que cada uno de los lenguajes usa como marco para admitir la sintaxis esperada o los modelos de programación asincrónicos de su propia manera.
En lugar de usar IAsyncOperation<TResult>
, algunos métodos asincrónicos de WinRT usan tipos de operación personalizados. Por ejemplo, dataReaderLoadOperation es un tipo winRT que implementa IAsyncOperation
con uint
como tipo de resultado. A continuación, el tipo de
Si tiene un método que devuelve un Task<T>
de .NET y necesita un IAsyncOperation<TResult>
para pasar a una API de WinRT, puede usar el método de extensión AsAsyncOperation.
Funciones de extensión de C++/WinRT
Nota
Existen funciones de extensión en los tipos de proyección de C++/WinRT para determinadas API de WinRT. Por ejemplo, winrt::Windows::Foundation::IAsyncAction
es el tipo de proyección de C++/WinRT para IAsyncAction. Las funciones de extensión no forman parte de la superficie de la interfaz binaria de la aplicación (ABI) de los tipos de WinRT reales, por lo que no se enumeran como miembros de las API de WinRT. Pero puede llamarlos desde cualquier proyecto de C++/WinRT. Consulta funciones de C++/WinRT que amplían las API de Windows Runtime.
TResult get() const;
Espera sincrónicamente para que se complete la operación y devuelve el valor completado. Produce una excepción correspondiente si se cancela la operación o especifica un estado de error. No debe llamarlo desde un apartamento de un solo subproceso. Para obtener más información y ejemplos de código que muestran cómo llamar a get
, vea Escribir una corrutina.
AsyncStatus wait_for(TimeSpan const& timeout) const;
Espera sincrónicamente para que se complete la operación o para el tiempo de espera especificado. Devuelve el estado del IAsyncOperation
o AsyncStatus::Started si ha transcurrido el tiempo de espera. Si la acción no agotó el tiempo de espera, llame a GetResults para obtener los resultados de la operación. Para obtener más información y ejemplos de código que muestran cómo llamar a wait_for
, consulte tiempos de espera asincrónicos que facilitan la.
Herencia de interfaz
IAsyncOperation<TResult>
hereda IAsyncInfo . Los tipos que implementan IAsyncOperation<TResult>
también implementan los miembros de interfaz de IAsyncInfo:
- Método Cancel
- método Close
- Propiedad ErrorCode de
- propiedad id. de
- propiedad Status
Notas para los implementadores
Al igual que con la llamada a los métodos existentes, hay formas específicas del lenguaje para definir métodos asincrónicos que no usan IAsyncOperation<TResult>
directamente. Si escribe código mediante .NET, el método puede devolver un Task<TResult>. Para C++/CX, puede usar el entorno de ejecución de simultaneidad de . Sin embargo, si va a definir un componente de , puede usar Task
/task
internamente, pero debe devolver una de las interfaces de WinRT para los métodos públicos. Los tipos de soporte asincrónico específicos del lenguaje (y muchos otros tipos específicos del lenguaje que podría usar convencionalmente en el código) no se pueden usar para el área expuesta pública de un componente de WinRT.
Propiedades
Completed |
Obtiene o establece el delegado al que se llama cuando se completa la operación. |
ErrorCode |
Obtiene una cadena que describe una condición de error de la operación asincrónica. (Heredado de IAsyncInfo) |
Id |
Obtiene el identificador de la operación asincrónica. (Heredado de IAsyncInfo) |
Status |
Obtiene un valor que indica el estado de la operación asincrónica. (Heredado de IAsyncInfo) |
Métodos
Cancel() |
Cancela la operación asincrónica. (Heredado de IAsyncInfo) |
Close() |
Cierra la operación asincrónica. (Heredado de IAsyncInfo) |
GetResults() |
Devuelve los resultados de la operación. |
Se aplica a
Consulte también
- IAsyncInfo
- IAsyncOperationWithProgress<TResult,TProgress>
- IAsyncAction
- tarea de
- de programación asincrónica de
- usar un componente de Windows Runtime