Асинхронное программирование

в этом разделе описывается асинхронное программирование в универсальная платформа Windows (UWP) и его представление в C#, Microsoft Visual Basic .net, C++ и JavaScript.

Использование асинхронного программирования позволит вашему приложению отвечать на запросы во время выполнения длительных операций. Например, приложение, скачивающее содержимое из Интернета, может ожидать получения данных несколько секунд. Если для получения содержимого вы использовали синхронный метод в потоке пользовательского интерфейса, приложение блокируется до момента возврата из метода. Приложение при этом не будет отвечать на действия пользователя и будет казаться зависшим, что может вызвать раздражение пользователя. В такой ситуации гораздо эффективнее использовать асинхронное программирование, которое позволит приложению работать и отвечать на запросы пользовательского интерфейса, одновременно ожидая завершения операции.

Для методов, выполняющихся в течение длительного времени, применение асинхронного программирования является нормой, и в этом смысле UWP — не исключение. JavaScript, C#, Visual Basic и C++ предоставляют языковую поддержку для асинхронных методов.

Асинхронное программирование в UWP

Многие функции UWP, такие как интерфейсы API медиакаптуре и API StorageFile , представлены как асинхронные API. По соглашению имена асинхронных API заканчиваются на "Async", чтобы указать, что часть их выполнения, скорее всего, будет выполняться после возвращения управления вызывающему объекту.

При использовании асинхронных API в коде вашего приложения UWP согласованно выполняются неблокирующие вызовы. Если вы будете применять эти асинхронные шаблоны в собственных определениях API, вызывающие объекты будут предсказуемо интерпретировать и использовать ваш код.

ниже приведены некоторые распространенные задачи, требующие вызова асинхронных среда выполнения Windows интерфейсов api.

  • Отображение окна сообщения

  • Работа с файловой системой, с отображением средства выбора файлов

  • Отправка и получение данных из Интернета

  • Использование сокетов, потоков, подключений

  • Работа со встречами, контактами, календарем

  • Работа с типами файлов, например открытие PDF-файлов, декодирование форматов изображений или мультимедиа

  • Взаимодействие с устройством или службой

При использовании асинхронной модели UWP вам, возможно, вовсе не придется явным образом управлять потоками. В каждом языке программирования имеется свой способ поддержки асинхронной модели для UWP.

Язык программирования Асинхронное представление
C# ключевое слово Async , оператор await
Visual Basic ключевое слово Async, оператор Await
C++/WinRT соподпрограмма и оператор co_await
C++/CX класс task, метод .then
JavaScript объект Promise, функция then

Асинхронные шаблоны в UWP на C# и Visual Basic

Обычно код, написанный на C# или Visual Basic, выполняется синхронно, то есть выполнение кода предыдущей строки завершается перед началом выполнения следующей. Для асинхронного выполнения кода использовались прошлые модели программирования Microsoft .NET, но большая часть результирующего кода была посвящена реализации асинхронности, а не задаче, которая решалась с помощью этого кода. В UWP, .NET Framework и компиляторах C# и Visual Basic существуют дополнительные компоненты, которые выделяют из кода асинхронные механизмы. Для .NET и UWP вы можете написать асинхронный код, ориентированный на задачу, а не на способ или время ее выполнения. Асинхронный код в целом схож с синхронным. Подробнее см. в разделе Вызов асинхронных API в C# и Visual Basic.

Асинхронные шаблоны в UWP с использованием C++/WinRT

В C++/WinRT используются соподпрограммы и оператор co_await . Дополнительные сведения и примеры кода см. в разделе Асинхронное программирование в C++/WinRT.

Асинхронные шаблоны в UWP с C++/CX

В C++/CX асинхронное программирование основано на классе task class и относящемся к нему методе then method. Синтаксис похож на синтаксис объектов Promise в JavaScript. Класс task class и связанные с ним типы также предоставляют возможности отмены и управления контекстом потока. Дополнительные сведения см. в разделе Асинхронное программирование в C++/CX.

Функция create_async обеспечивает поддержку создания асинхронных интерфейсов API, которые могут использоваться из JavaScript или любого другого языка, поддерживающего UWP. Дополнительные сведения см. в разделе Создание асинхронных операций в C++/CX.

Асинхронные шаблоны в UWP на JavaScript

В JavaScript асинхронное программирование следует предложенному стандарту Common JS Promises/A, в соответствии с которым асинхронные методы возвращают объекты Promise. Объекты Promise используются в UWP и в библиотеке Windows для JavaScript.

Объект Promise представляет собой значение, которое будет сформировано в будущем. В UWP вы получаете объект Promise из функции фабрики, которая по правилам имеет имя, оканчивающееся словом «Async».

Во многих случаях вызов асинхронной функции так же прост, как и вызов обычной функции. Различие в том, что вам нужно использовать метод then или done, чтобы назначить обработчики для формирования результата, обработки ошибок и запуска операции.