IAsyncOperation<TResult> Interfaz

Definición

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 Windows Runtime asincrónicos 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 Windows Runtime que tienen un resultado tras la finalización, pero no notifican el progreso. Esto constituye más de 650 API de Windows Runtime diferentes. Las API que informan del 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 tienes acceso al valor devuelto de IAsyncOperation 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, vea Programación asincrónica o una de las guías específicas del lenguaje para Windows Runtime programación asincrónica (llamar a las API asincrónicas en C# o Visual Basic, C++, JavaScript).

No es habitual usar IAsyncOperation<TResult> directamente aunque no use una sintaxis awaitable específica del lenguaje. Cada uno de los lenguajes tiene puntos de extensión que generalmente son más fáciles de usar que la interfaz Windows Runtime. JavaScript tiene WinJS.Promise y la sintaxis then/done . .NET tiene el método de extensión AsTask y, una vez que IAsyncOperation<TResult> se convierte en un TResult> de tarea<, es más fácil obtener el resultado, cancelar, obtener notificaciones al finalizar, etc. Para C++/CX, puede ajustar las llamadas mediante el runtime de simultaneidad (y usar create_task). En otras palabras, 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ónica de su propia manera.

En lugar de usar IAsyncOperation<TResult>, algunos métodos asincrónicos Windows Runtime usan tipos de operación personalizados. Por ejemplo, DataReaderLoadOperation es un tipo de Windows Runtime que implementa IAsyncOperation mediante uint como tipo de resultado. A continuación, el tipo DataReaderLoadOperation se usa como tipo de operación/resultado personalizado para el método DataReader.LoadAsync .

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 Windows Runtime. 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 Windows Runtime reales, por lo que no se muestran como miembros de las API de Windows Runtime. Pero puedes 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, consulta 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 de IAsyncOperation o AsyncStatus::Started si ha transcurrido el tiempo de espera. Si la acción no ha agotado 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, consulta Tiempos de espera asincrónicos facilitados.

Herencia de interfaz

IAsyncOperation<TResult> hereda IAsyncInfo. Los tipos que implementan IAsyncOperation<TResult> también implementan los miembros de la interfaz de IAsyncInfo:

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 TResult> de tarea<. Para C++/CX, puede usar el runtime de simultaneidad. Sin embargo, si va a definir un componente, puede usar latarea Tarea/ internamente, pero debe devolver una de las interfaces Windows Runtime 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 se pueden usar convencionalmente en el código) no se pueden usar para el área expuesta pública de un componente de Windows Runtime.

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