Поделиться через


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

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

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

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

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

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

При использовании асинхронных API в приложении универсальная платформа Windows (UWP) код выполняет неблокирующие вызовы согласованно. При реализации этих асинхронных шаблонов в собственных определениях API вызывающие программы могут понять и использовать код в прогнозируемом виде.

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

  • Отображение диалогового окна сообщения

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

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

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

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

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

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

С помощью асинхронного шаблона UWP можно избежать явного управления потоками. Каждый язык программирования поддерживает асинхронный шаблон для UWP собственным образом:

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

Асинхронные шаблоны в 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 асинхронное программирование основано на классе задач, а затем его методе. Синтаксис аналогичен обещанию JavaScript. Класс задач и его связанные типы также предоставляют возможность отмены и управления контекстом потока. Дополнительные сведения см. в статье "Асинхронное программирование" в C++/CX.

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

Асинхронные шаблоны в UWP с помощью JavaScript

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

Объект promise представляет значение, которое будет выполнено в будущем. В UWP вы получаете объект promise из функции фабрики, которая по соглашению имеет имя, которое заканчивается "Async".

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