Programación asincrónica
En este tema se describe la programación asincrónica en el Plataforma universal de Windows (UWP) y su representación en C#, Microsoft Visual Basic .NET, C++y JavaScript.
El uso de la programación asincrónica ayuda a la aplicación a mantener la capacidad de respuesta cuando funciona, lo que puede tardar mucho tiempo. Por ejemplo, una aplicación que descarga contenido de Internet puede pasar varios segundos esperando a que llegue el contenido. Si ha usado un método sincrónico en el subproceso de interfaz de usuario para recuperar el contenido, la aplicación se bloquea hasta que el método devuelve. La aplicación no responderá a la interacción del usuario y, dado que parece que no responde, el usuario podría frustrarse. Una manera mucho mejor es usar la programación asincrónica, donde la aplicación sigue ejecutándose y respondiendo a la interfaz de usuario mientras espera a que se complete una operación.
Para los métodos que pueden tardar mucho tiempo en completarse, la programación asincrónica es la norma y no la excepción en UWP. JavaScript, C#, Visual Basic y C++ proporcionan compatibilidad con lenguajes para métodos asincrónicos.
Programación asincrónica en UWP
Muchas características de UWP, como las API de MediaCapture y las API storageFile, se exponen como API asincrónicas. Por convención, los nombres de las API asincrónicas terminan con "Async" para indicar que es probable que parte de su ejecución tenga lugar después de que el control haya vuelto al autor de la llamada.
Cuando usas API asincrónicas en tu aplicación de Plataforma universal de Windows (UWP), el código realiza llamadas sin bloqueo de forma coherente. Al implementar estos patrones asincrónicos en sus propias definiciones de API, los autores de llamadas pueden comprender y usar el código de forma predecible.
Estas son algunas tareas comunes que requieren llamar a las API asincrónicas de Windows Runtime.
Mostrar un cuadro de diálogo de mensaje
Trabajar con el sistema de archivos, mostrando un selector de archivos
Envío y recepción de datos hacia y desde Internet
Uso de sockets, flujos, conectividad
Trabajar con citas, contactos, calendario
Trabajar con tipos de archivo, como abrir archivos portables de formato de documento (PDF) o descodificar formatos de imagen o multimedia
Interacción con un dispositivo o un servicio
Con el patrón asincrónico de UWP, es posible que puedas evitar administrar explícitamente los subprocesos en absoluto. Cada lenguaje de programación admite el patrón asincrónico para UWP de su propia manera:
Lenguaje de programación | Representación asincrónica |
---|---|
C# | palabra clave async, operador await |
Visual Basic | Palabra clave Async, operador Await |
C++/WinRT | corrutina y operador de co_await |
C++/CX | task class, .then method |
JavaScript | promise (objeto) y, a continuación, function |
Patrones asincrónicos en UWP con C# y Visual Basic
Un segmento típico de código escrito en C# o Visual Basic se ejecuta sincrónicamente, lo que significa que cuando se ejecuta una línea, finaliza antes de que se ejecute la línea siguiente. Ha habido modelos de programación anteriores de Microsoft .NET para la ejecución asincrónica, pero el código resultante tiende a resaltar la mecánica de ejecutar código asincrónico en lugar de centrarse en la tarea que el código intenta realizar. Los compiladores de UWP, .NET Framework y C# y Visual Basic han agregado características que abstraen la mecánica asincrónica del código. Para .NET y UWP, puedes escribir código asincrónico que se centre en lo que hace el código en lugar de en cómo y cuándo hacerlo. El código asincrónico tendrá un aspecto razonablemente similar al código sincrónico. Para obtener más información, consulte Llamada a API asincrónicas en C# o Visual Basic.
Patrones asincrónicos en UWP con C++/WinRT
Con C++/WinRT, usa corrutinas y el operador co_await . Para obtener más información y ejemplos de código, consulta Programación asincrónica en C++/WinRT.
Patrones asincrónicos en UWP con C++/CX
En C++/CX, la programación asincrónica se basa en la clase de tarea y su método then. La sintaxis es similar a la de las promesas de JavaScript. La clase de tarea y sus tipos relacionados también proporcionan la capacidad de cancelación y administración del contexto del subproceso. Para obtener más información, consulta Programación asincrónica en C++/CX.
La función create_async proporciona compatibilidad con la producción de API asincrónicas que se pueden consumir desde JavaScript o cualquier otro lenguaje que admita UWP. Para obtener más información, consulta Crear operaciones asincrónicas en C++/CX.
Patrones asincrónicos en UWP mediante JavaScript
En JavaScript, la programación asincrónica sigue el estándar propuesto common JS Promises/A al tener métodos asincrónicos que devuelven objetos de promesa. Las promesas se usan tanto en UWP como en la biblioteca de Windows para JavaScript.
Un objeto promise representa un valor que se cumplirá en el futuro. En la UWP se obtiene un objeto de promesa de una función de fábrica, que por convención tiene un nombre que termina con "Async".
En muchos casos, llamar a una función asincrónica es casi tan simple como llamar a una función convencional. La diferencia es que se usa el método then o done para asignar los controladores para los resultados o errores y para iniciar la operación.